使用View组件生成触觉反馈

使用View组件生成触觉反馈

触感最基本的使用场景之一是为用户交互提供反馈。时间选择器、虚拟键盘上的按键按下以及文本选择是触觉反馈的常见良好用例。有关何时以及如何应用触感的更多信息,请阅读触感设计原则。

本页介绍提供触觉反馈的三种方式。

使用 View (推荐)。此方法面向操作,支持范围最广,且无需 VIBRATE 权限。

使用预定义的 VibrationEffect。此方法更灵活,但也存在一些权衡。

使用原语进行高级组合。此方法较新且更灵活,但需要特定的设备支持。

这些方法使用设备级别定义的原语来提供针对手持设备量身定制的高质量反馈。

注意: 我们强烈不建议使用旧的 Vibrator 方法(使用 createOneshot 或 createWaveform),即使设备上似乎支持它们。这些模式对于常规触觉反馈来说通常声音太大;仅在需要强调极其重要的操作时才将其用作备用方案。

所有触觉反馈方法默认都会遵循用户的触摸反馈设置。

使用 View 组件生成触觉反馈

使用 View.performHapticFeedback 方法生成触觉反馈。由 HapticFeedbackConstants 定义的触感常量侧重于其在应用中的功能,而不是执行的触觉效果类型。

底层实现可能会因设备和硬件能力而异,但应用只需考虑在特定上下文中提供何种类型的反馈。通过侧重于功能,您可以为类似交互启用触觉反馈。随着时间的推移,用户会学会将不同的含义与不同的触感关联起来。

先决条件:启用触觉反馈

只要 View 可见,就可以为其事件使用触觉反馈。某些事件,例如长按,具有默认触感,如果视图上的监听器处理了该事件(返回 true),就会触发。

通过将 View.hapticFeedbackEnabled 属性设置为 false,可以禁用 Android View 的触觉反馈。禁用此属性会导致默认反馈。

同时,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-based 方法侧重于用户交互。它更适合在系统范围内保持一致。然而,也可以调用特定的预定义 VibrationEffect API 来获取自定义的触觉反馈效果。

预定义效果可用作 VibrationEffect constants,并且可以使用 Vibrator 服务检查其支持情况并进行播放,如下例所示。

了解设备对 VibrationEffect API 的支持

在基本用法中,无需检查单个 VibrationEffect API 的支持情况。诸如 Vibrator.areEffectsSupported 和 Vibrator.areAllEffectsSupported 之类的 API 用于确定设备是否具有常量的自定义实现。如果不存在自定义效果,您的应用仍可以播放这些效果并使用平台定义的备用实现。

有关更多详细信息,请参阅预定义的 VibrationEffect。

先决条件:加载 Vibrator 和 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 权限才能使用此服务振动设备。可以将权限添加到应用清单文件中

播放预定义的 VibrationEffect

注意: 遵循指南,效果应清晰,其强度应与重要性相对应。如果某个效果不可用,请考虑回退到无效果,而不是不和谐的替代方案。

可以使用 VibrationEffect.createPredefined 准备预定义效果,然后使用 Vibrator 上的一个 vibrate 方法进行播放。

此示例播放一个 Click 效果。

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 的使用。

相关星际资讯

中国女足获世界杯入场券,王霜:下一场当决赛踢
365bet体育在线导航

中国女足获世界杯入场券,王霜:下一场当决赛踢

🕒 07-02 👁️ 2614
win10开机黑屏很久才进入桌面怎么办 win10开机黑屏很久才进入桌面解决方法【详解】
奔驰GLC中的GLC每个字母分别是什么意思。
bat365入口

奔驰GLC中的GLC每个字母分别是什么意思。

🕒 07-22 👁️ 2451