我希望为应用程序的按钮添加触觉反馈,并通过编程控制它们以显示按钮状态(启用和禁用)。 默认的触觉反馈设置器仅适用于长按。如何使其适用于简单的按钮点击。
是否有一种方法在触摸移动等事件上具有触觉反馈?
2019年12月24日更新:
启用触觉反馈需通过以下方法:
android:hapticFeedbackEnabled="true"
。或在代码中使用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以始终使用它。
这里有一个答案,虽然它可能不是最佳实现方式:
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
}
}
别忘了,你还需要在程序清单(manifest)中添加“android.permission.VIBRATE”权限。你可以通过将以下内容添加到“AndroidManifest.xml”文件来实现:
<uses-permission android:name="android.permission.VIBRATE"/>
View有一个performHapticFeedback函数,可以让您在需要时执行它,例如在OnClick监听器上。
HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING
,才对我起作用,就像Hamid Vakilian在下面的回答中所说。 - npacegetWindow().getDecorView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
一个您可以在活动中使用的直截了当的方法。postDelayed
中才能使其工作。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
)
}
android:hapticFeedbackEnabled="true"
或者在代码中使用btn.setHapticFeedbackEnabled(true);
来启用触觉反馈。 - Ivan Chau