2010-02-09 68 views
30

我想将触觉反馈添加到我的应用程序的按钮并以编程方式控制它们以显示按钮状态(启用和禁用)。 缺省触觉反馈设置器仅适用于长按。我如何使它适用于简单的按钮点击。如何在按钮视图上启用触觉反馈

有没有一种方法可以对触摸移动等事件进行触觉反馈?

回答

55

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

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

我希望帮助。

+0

如果您将'this.getSystemService(VIBRATOR_SERVICE);'在按钮的onClickListener中,然后'this'引用没有getSystemService方法的按钮本身。改为使用它:'getApplicationContext()。getSystemService(VIBRATOR_SERVICE);' – 2012-04-13 13:38:35

+0

你不能总是在onClickListener中使用getApplicationContext() – sudocoder 2014-01-21 16:43:45

26

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

+1

添加以下代码在onClickListener的onclick方法,但它没有工作 btn_left \t \t \t \t \t .performHapticFeedback(HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); 我不太确定这个标志是如何工作的 – 2010-02-10 04:48:17

+1

您是否将触觉反馈设置为启用?根据文档:http://developer.android.com/intl/fr/reference/android/view/View.html#performHapticFeedback(int)这是获得触觉反馈的必要条件。我不确定这种常量,你是否尝试过使用VIRTUAL_KEY? – 2010-02-10 16:54:12

+0

HapticFeedbackConstants.VIRTUAL_KEY不可用。我目前正在使用Android 1.5_r2 是的,触觉反馈启用了xml中的按钮本身。 仍然没有运气 – 2010-02-11 06:15:08

70

以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以便使用它。

+5

应该接受以更好地使用api。 – Ewoks 2014-08-06 14:40:29

+12

在按钮xml中添加'android:hapticFeedbackEnabled =“true”'或使用'btn.setHapticFeedbackEnabled(true);'in码 – 2015-10-25 03:58:13