6.25提供触觉反馈
问题
您想要为您的应用程序提供触觉反馈。
解
使用Android的触觉控制提供即时物理反馈。
讨论
建立用户之间的信心,他们的行动有影响是任何平台上的任何应用程序的要求。规范示例是显示一个进度条,让用户知道他们的操作生效并正在处理。对于触摸界面,这种技术仍然适用,但是触摸界面的优点是开发人员有机会提供物理反馈,因为用户能够实际感觉设备对他们的动作做出反应。
Android有一些股票触觉控制,但如果这些不能满足您的需要,你可以获得对设备的振动器的自定义反馈的控制。
对设备的振动器的自定义控制需要权限。这是你必须在AndroidManifest.xml文件中显式列出的内容。如果你对于要求获得权限有偏执,或者如果你已经拥有一个很长的权限列表,你可能想使用股票Android触觉反馈选项。
一些设备没有振动器;因此,当您在此类设备上运行此配方中的示例时,您将不会收到触觉反馈。
我将首先展示更复杂的例子,自定义触觉反馈。
使用设备的振动器自定义触觉反馈
您的第一步是请求必要的权限。将以下行添加到您的AndroidManifest.xml文件:
<uses-permission android:name =“android.permission.VIBRATE”/>
现在定义一个监听器来响应触摸事件。示例6-30中显示的CustomHapticListener实际上是我的活动的私有非静态内部类。这是因为它需要访问Context方法getSystemService(...)。
实例6-30。触觉反馈OnTouchListener实现
股票触觉反馈事件
第一件事:第一:使用股票Android触觉反馈事件,您必须启用此在View-by-View基础上。也就是说,您必须为每个视图显式启用触觉反馈。
您可以在布局文件中以声明方式启用触觉反馈,或以Java编程方式启用触觉反馈。要在布局中启用触觉反馈,只需向视图中添加android:hapticFeedbackEnabled =“true”属性即可。这里有一个缩写示例:
现在触觉反馈已经启用,下一步是注册一个OnTouchListener,然后执行实际的反馈。例6-31显示了当用户触摸视图时如何注册OnTouchListener并执行触觉反馈。
实例6-31。触觉反馈演示应用程序
你会注意到,1到3我用三个不同的触觉反馈常量初始化三个不同的按钮。这些是Android的股票价值;两个似乎提供了完全相同的反馈。示例6-31是一个测试应用程序的一部分,我写了演示触觉反馈,我不能告诉HapticFeedbackConstants.LONG_PRESS和HapticFeedbackConstants.KeyboardTap之间的区别。此外,HapticFeedbackConstants.VIRTUAL_KEY似乎在测试时不提供任何反馈。4是执行触觉反馈的地方。总而言之,提供触觉反馈是相当简单的,但请记住,如果你想控制设备的振动器,你必须请求在AndroidManifest.xml文件中的权限。如果您选择使用股票Android触觉反馈选项,请确保您在布局或编程方式启用您的视图的触觉反馈。
问题
您想要为您的应用程序提供触觉反馈。
解
使用Android的触觉控制提供即时物理反馈。
讨论
建立用户之间的信心,他们的行动有影响是任何平台上的任何应用程序的要求。规范示例是显示一个进度条,让用户知道他们的操作生效并正在处理。对于触摸界面,这种技术仍然适用,但是触摸界面的优点是开发人员有机会提供物理反馈,因为用户能够实际感觉设备对他们的动作做出反应。
Android有一些股票触觉控制,但如果这些不能满足您的需要,你可以获得对设备的振动器的自定义反馈的控制。
对设备的振动器的自定义控制需要权限。这是你必须在AndroidManifest.xml文件中显式列出的内容。如果你对于要求获得权限有偏执,或者如果你已经拥有一个很长的权限列表,你可能想使用股票Android触觉反馈选项。
一些设备没有振动器;因此,当您在此类设备上运行此配方中的示例时,您将不会收到触觉反馈。
我将首先展示更复杂的例子,自定义触觉反馈。
使用设备的振动器自定义触觉反馈
您的第一步是请求必要的权限。将以下行添加到您的AndroidManifest.xml文件:
<uses-permission android:name =“android.permission.VIBRATE”/>
现在定义一个监听器来响应触摸事件。示例6-30中显示的CustomHapticListener实际上是我的活动的私有非静态内部类。这是因为它需要访问Context方法getSystemService(...)。
实例6-30。触觉反馈OnTouchListener实现
private class CustomHapticListener implements OnTouchListener {
// Duration in milliseconds to vibrate
private final int durationMs;
public CustomHapticListener( int ms ) {
durationMs = ms;
}
@Override
public boolean onTouch( View v, MotionEvent event ) {
if( event.getAction() == MotionEvent.ACTION_DOWN ){
Vibrator vibe = ( Vibrator ) getSystemService( VIBRATOR_SERVICE ); //1
vibe.vibrate( durationMs ); //2
}
return true;
}
}
1和2并且是重要的线。1获得对振动器服务的引用2并振动设备。如果您没有请求vibrate权限,2将抛出异常。
现在注册监听器。在Activity的onCreate(...)方法中,您需要获取对要附加触觉反馈的GUI元素的引用,然后注册我们之前定义的OnTouchListener:@Override
public void onCreate( Bundle savedInstance ) {
Button customBtn = ( Button ) findViewById( R.id.btn_custom );
customBtn.setOnTouchListener( new CustomHapticListener( 100 ) );
}而已;你在控制触觉反馈。现在我们将继续使用股票Android触觉反馈。
股票触觉反馈事件
第一件事:第一:使用股票Android触觉反馈事件,您必须启用此在View-by-View基础上。也就是说,您必须为每个视图显式启用触觉反馈。
您可以在布局文件中以声明方式启用触觉反馈,或以Java编程方式启用触觉反馈。要在布局中启用触觉反馈,只需向视图中添加android:hapticFeedbackEnabled =“true”属性即可。这里有一个缩写示例:
<button android:hapticFeedbackEnabled="true">
</button>这里是如何做同样的事情在代码:
Button keyboardTapBtn = ( Button ) findViewById( btnId );
keyboardTapBtn.setHapticFeedbackEnabled( true );
现在触觉反馈已经启用,下一步是注册一个OnTouchListener,然后执行实际的反馈。例6-31显示了当用户触摸视图时如何注册OnTouchListener并执行触觉反馈。
实例6-31。触觉反馈演示应用程序
// Initialize some buttons with the stock Android haptic feedback values
private void initializeButtons() {
// initialize the buttons with the standard haptic feedback options
initializeButton( R.id.btn_keyboardTap, HapticFeedbackConstants.KEYBOARD_TAP ); //1
initializeButton( R.id.btn_longPress, HapticFeedbackConstants.LONG_PRESS ); //2
initializeButton( R.id.btn_virtualKey, HapticFeedbackConstants.VIRTUAL_KEY );//3
}
// helper method to initialize single buttons and register an OnTouchListener
// to perform the haptic feedback
private void initializeButton( int btnId, int hapticId ) {
Button btn = ( Button ) findViewById( btnId );
btn.setOnTouchListener( new HapticTouchListener( hapticId ) );
}
// Class to handle touch events and respond with haptic feedback
private class HapticTouchListener implements OnTouchListener {
private final int feedbackType;
public HapticTouchListener( int type ) { feedbackType = type; }
public int feedbackType() { return feedbackType; }
@Override
public boolean onTouch(View v, MotionEvent event) {
// only perform feedback when the user touches the view, as opposed
// to lifting a finger off the view
if( event.getAction() == MotionEvent.ACTION_DOWN ){
// perform the feedback
v.performHapticFeedback( feedbackType() );//4
}
return true;
}
}
你会注意到,1到3我用三个不同的触觉反馈常量初始化三个不同的按钮。这些是Android的股票价值;两个似乎提供了完全相同的反馈。示例6-31是一个测试应用程序的一部分,我写了演示触觉反馈,我不能告诉HapticFeedbackConstants.LONG_PRESS和HapticFeedbackConstants.KeyboardTap之间的区别。此外,HapticFeedbackConstants.VIRTUAL_KEY似乎在测试时不提供任何反馈。4是执行触觉反馈的地方。总而言之,提供触觉反馈是相当简单的,但请记住,如果你想控制设备的振动器,你必须请求在AndroidManifest.xml文件中的权限。如果您选择使用股票Android触觉反馈选项,请确保您在布局或编程方式启用您的视图的触觉反馈。