触感反馈最基本的用例之一就是为用户提供反馈 互动。时间选择器、虚拟键盘上的按键,以及文本 选择是不错的触感反馈用例的常见示例。有关 有关何时以及如何应用触感反馈的信息,请参阅 触感反馈设计原则。
本页介绍了提供触感反馈的三种方法。
- 使用
View
(推荐)。这种方法以行动为导向, 拥有最广泛的支持,并且不需要VIBRATE
权限。 - 使用预定义的
VibrationEffect
。 这种方法具有更大的灵活性,但有一些权衡。 - 将高级组合与基元结合使用。这个 方法更新且更加灵活,但需要特定的设备 联系。
这些方法使用在设备级别定义的基元来提供高质量的 针对手持设备提供量身定制的反馈
所有触感反馈方法都会遵循用户的触摸反馈设置, 默认值。
使用 View
组件生成触感反馈
使用 View.performHapticFeedback
方法生成触感反馈。通过
由 HapticFeedbackConstants
定义的触感反馈常量聚焦于
功能,而不是所执行的触感反馈效果的类型。
底层实现可能因设备和硬件而异 功能,但应用只需考虑提供的反馈类型 特定上下文。通过专注于功能,您可以启用触感反馈 针对类似互动提供反馈。用户学会如何将不同含义联系起来 不同的触感反馈。
前提条件:启用触感反馈
只要 View
可见,触感反馈就可以用于其事件。
某些事件(例如长按)具有默认触感反馈,如果
视图上的监听器处理事件(返回 true
)。
Android View
可以通过设置
将 View.hapticFeedbackEnabled
属性设置为 false
。停用此媒体资源
会生成默认反馈。
performHapticFeedback
方法还会遵循系统设置
HAPTIC_FEEDBACK_ENABLED
:让用户可以将其停用
整个系统。
与其他触感反馈 API 不同,将 HapticFeedbackConstants
与 View
结合使用
不需要 VIBRATE
权限。
选择一个HapticFeedbackConstant
将 View
组件与 HapticFeedbackConstants
搭配使用时,无需
评估特定设备支持,因为这些常量将具有回退机制,
行为。唯一要考虑的因素是目标 SDK 级别
常量。
示例 1:按键
下面的示例展示了如何在 View
中向触控输入添加触感反馈
使用触摸监听器这些效果模拟按下按钮时的感觉
然后松开手指
Kotlin
class HapticTouchListener : View.OnTouchListener { override fun onTouch(View view, MotionEvent event) : Boolean { when (event.actionMasked) { MotionEvent.ACTION_DOWN -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) MotionEvent.ACTION_UP -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE) } return true } }
Java
class HapticTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); break; case MotionEvent.ACTION_UP: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE); break; } return true; } }
示例 2:提交按钮
触感反馈用例不仅仅是模拟与设备之间的物理交互
设备。它们还可用于传达抽象含义。例如:
一般期望值
CONFIRM
效应是一种
短暂的轻微振动
REJECT
可能是
从而为信号故障提供更强的反馈。具体说明如下
提交按钮反馈示例
Kotlin
submitButton.setOnClickListener { view -> val successful = performSubmit() if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM) } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT) } }
Java
submitButton.setOnClickListener(view -> { boolean successful = performSubmit(); if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM); } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT); } });
使用预定义的 VibrationEffect
生成触感反馈
使用基于 View
的方法侧重于用户互动。时间是
以保证整个系统的一致性。不过,特定的预定义
还可以调用 VibrationEffect
API 来实现自定义触感反馈
效果。
预定义的效果可用:VibrationEffect
常量,可以是
检查了是否支持并使用 Vibrator
服务,如
示例。
了解设备对 VibrationEffect
API 的支持
在基本用法中,应该无需针对
VibrationEffect
API。Vibrator.areEffectsSupported
等 API
和 Vibrator.areAllEffectsSupported
用于确定设备是否
常量的自定义实现。如果自定义效果
应用仍然可以播放音效,并使用平台定义的
后备实现
有关详情,请参阅预定义
VibrationEffect
。
前提条件:加载振动器和 VIBRATE
权限
大多数振动都可通过 Vibrator
服务播放,该服务可加载
如下所示:
Kotlin
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Java
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
该应用需要
VIBRATE
权限(按顺序排列)
让使用此服务的设备振动。可以将权限添加到
应用清单文件:
<uses-permission android:name="android.permission.VIBRATE"/>
播放预定义的VibrationEffect
您可以使用 VibrationEffect.createPredefined
准备预定义的效果,
然后在 Vibrator
上使用 vibrate
方法之一进行播放。
该示例发挥了点击效果。
Kotlin
val vibrator = context.getSystemService(Vibrator::class.java) ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
Java
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
将高级组合与基元结合使用
VibrationEffect.Composition
API 为
触感反馈。不过,与效果不同,这些基元
系统级别的回退,这意味着需要格外注意
设备支持的基元和其他功能。
有关如何使用这些 API 的详情,请参阅 创建自定义触感反馈效果。