android 如何在按钮视图上启用触觉反馈

cld4siwp  于 2022-12-25  发布在  Android
关注(0)|答案(6)|浏览(182)

我想添加触觉反馈到我的应用程序的按钮,并控制他们的编程显示按钮状态(启用和禁用)。默认的触觉反馈设置只适用于长按。我如何使它工作的简单按钮点击。
有没有一种方法可以对触摸等事件进行触觉反馈?

hgtggwj0

hgtggwj01#

2019年12月24日更新:

必须通过以下方式启用视图触觉功能:
1.在xml中添加android:hapticFeedbackEnabled="true"
1.或者在代码中使用view.setHapticFeedbackEnabled(true);

  • (引自周文雄)*

然而,还有一件事要考虑的是在虚拟设备中启用触觉设置。这有时候很烦人,所以我们有一些标志来帮助(这将以某种方式忽略这些启用设置):

view.performHapticFeedback(
    HapticFeedbackConstants.VIRTUAL_KEY, 
    HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING  // Ignore device's setting. Otherwise, you can use FLAG_IGNORE_VIEW_SETTING to ignore view's setting.
);

Mayra的一个例子是,使用此代码运行触觉反馈。

View view = findViewById(...)
view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);

这行代码可以很容易地包含在你的onclick动作中。好的部分是你不需要在AndroidManifest中设置权限(我不需要在SdkVersion“7”上设置权限(2. 1或2. 3是7))
还要注意,在我这里的代码中,只有当用户启用了全局触觉反馈时,它才会运行。

bq9c1y66

bq9c1y662#

下面是一个答案,尽管它可能不是最佳实现:

import android.view.View;
import android.os.Vibrator;

public class Main extends Activity implements OnClickListener
{
    private View myView;
    private Vibrator myVib;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        myVib = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);

        //myView can be any type of view, button, etc.
        myView = (View) this.findViewById(R.id.myView);
        myView.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v)
    {
        myVib.vibrate(50);
        //add whatever you want after this
    }
}

不要忘记,您还需要将“android.permission.VIBRATE”权限添加到程序的清单文件中。您可以通过将以下内容添加到“AndroidManifest.xml”文件中来完成此操作:

<uses-permission android:name="android.permission.VIBRATE"/>
vzgqcmou

vzgqcmou3#

View有一个performHapticFeedback函数,它应该允许您在任何需要的时候执行它,即在OnClick侦听器上。

jljoyd4f

jljoyd4f4#

getWindow().getDecorView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);

一种可以在活动中使用的简单方法。

6qftjkof

6qftjkof5#

除了前面的答案,请确保“振动反馈”选项已从您的设备设置启用

u1ehiz5o

u1ehiz5o6#

在我的例子中,当一个对话框片段打开时,我试图执行触觉反馈。这个问题的现有答案不起作用。我必须用postDelayed来 Package 它。

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    preformHapticFeedback()
}

private fun preformHapticFeedback() {
    val delay = 1L
    requireView().postDelayed(
        {
            requireView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
        },
        delay
    )
}

相关问题