47

我想向我的应用程序按钮添加触觉反馈并以编程方式控制它们以显示按钮状态(启用和禁用)。默认的触觉反馈设置器仅适用于长按。我怎样才能使它适用于简单的按钮点击。

有没有办法对触摸移动等事件进行触觉反馈?

4

5 回答 5

116

2019 年 12 月 24 日更新:

视图必须通过以下方式启用触觉功能:

  1. android:hapticFeedbackEnabled="true"在xml中添加。
  2. 或者view.setHapticFeedbackEnabled(true);在代码中使用

    (引自 Ivan Chau)

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

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 ))

另请注意,在我的代码中,只有当用户将触觉反馈启用为全局时,它才会运行。请参阅http://developer.android.com/reference/android/view/HapticFeedbackConstants.html以始终使用它。

于 2012-10-31T06:42:56.533 回答
70

这是一个答案,尽管它可能不是最好的实现:

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"/>

我希望这会有所帮助。

于 2010-03-31T07:09:28.450 回答
30

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

于 2010-02-09T17:49:29.550 回答
14
getWindow().getDecorView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);

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

于 2019-01-21T18:16:35.340 回答
2

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

于 2018-07-17T13:19:12.483 回答