实现常量和基元

触感反馈常量和基元由振动器 HAL 定义,并由 Android 框架映射到公共 API。执行以下检查,确定您的设备是否满足实现触感反馈的最低要求:

触感反馈实现流程图

图 2. 实现效果

实现基元的步骤流程图

图 3. 实现基元

实现常量

开发者可以通过 VibrationEffect.createPredefined() 使用 VibrationEffect 中的触感反馈常量。请检查以下触感反馈常量的实现状态。

触感反馈常量 位置及摘要
EFFECT_TICKEFFECT_CLICKEFFECT_HEAVY_CLICKEFFECT_DOUBLE_CLICK VibrationEffect
VibrationEffect 中的触感反馈常量不包含任何输入事件的概念,也没有界面元素,而是包含能量等级的概念,例如 EFFECT_CLICKEFFECT_HEAVY_CLICK,这些常量由 createPredefined() 调用。

接下来所述的备用振动在未实现 VibrationEffect 常量的设备上执行。建议更新这些配置,以在此类设备上获得最佳性能。

  • EFFECT_CLICK

    使用 VibrationEffect.createWaveform 创建的波形振动,以及在 frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern 配置的时间。

  • EFFECT_HEAVY_CLICK

    使用 VibrationEffect.createWaveform 创建的波形振动,以及在 frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern 配置的时间。

    • EFFECT_DOUBLE_CLICK

    使用 VibrationEffect.createWaveform 创建的波形振动,以及时间 (0, 30, 100, 30)。

  • EFFECT_TICK

    使用 VibrationEffect.createWaveform 创建的波形振动,以及在 frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern 配置的时间。

测试触感反馈的步骤流程图

图 4. 实现反馈常量

开发者可以通过 View.performHapticFeedback() 使用 HapticFeedbackConstants 中的触感反馈常量。请检查以下公开反馈常量的状态。

触感反馈常量 位置及摘要
CLOCK_TICKCONTEXT_CLICKKEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAPLONG_PRESSTEXT_HANDLE_MOVEVIRTUAL_KEYVIRTUAL_KEY_RELEASECONFIRMREJECTGESTURE_STARTGESTURE_END HapticFeedbackConstants
HapticFeedbackConstants 中的触感反馈常量可协助处理某些界面元素的输入事件,例如 KEYBOARD_PRESSKEYBOARD_RELEASE,这些事件由 performHapticFeedback() 调用。

实现基元

VibrationEffect.Composition 中的触感反馈基元带有可调节的强度,开发者可以通过 addPrimitive(int primitiveId, float scale, int delay) 加以使用。这些基元可分为两类:

  • 短基元:持续时间较短(通常不到 20 毫秒)的基元。这类基元包括 CLICKTICKLOW_TICK

  • 线性调频基元:振幅和频率会发生变化的基元,通常持续时间比短基元长。这类基元包括 SLOW_RISEQUICK_RISEQUCK_FALLTHUDSPIN

短基元

短基元可以通过振动器电机输出加速度配置文件进行描述。每个基元使用的绝对频率各不相同,具体取决于致动器的共振频率。如需详细了解硬件设置和用于测量输出的工具,请参阅设置测试设备

脉冲到响铃比率 (PRR) 是短时间振动的一个有价值的质量指标,如图 5 所示。PRR 定义为主脉冲响铃脉冲的比率。主脉冲由振幅下降到峰值振幅的 10% 这段时间内的信号定义,而响铃脉冲由振幅从峰值振幅的 10% 下降到低于峰值振幅的 1% 这段时间内的信号定义。PRR 的计算公式如下:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

有关 PRR 的更多信息,请参阅分析波形。如需详细了解如何分析和比较结果,请参阅使用性能图比较结果

脉冲到响铃比率

图 5. 脉冲到响铃比率的定义

短基元可以用作用户输入反馈,或者在较长的组合中播放,以创建柔和的纹理。这意味着通常会频繁触发并快速连续播放短基元。单个短基元的感知强度可能会加剧更大的效果强度。所以在校准单个 Tick 或 Low Tick 基元时,请使用更大的组合(例如 100 个连续的 Tick)。

Click 基元

Click 基元是一种强烈、利落的效果,通常在接近设备共振频率的情况下运行,用于在短时间内达到最大输出。它比其他基元更强烈、更深刻,并且以最大强度执行。

如果可以,请在开始时使用电机过载,并在结束时使用主动制动,以实现较短的电机上升和下降时间。对于某些电机,使用方波(而非正弦波)可以实现更快的加速度。图 6 显示了 Click 基元的输出加速度配置文件的示例:

Click 基元的输出加速度配置文件

图 6. 示例:Click 基元的输出加速度配置文件

参数 指南
时长

目标:12 毫秒

限制:< 30 毫秒

峰值输出加速度

目标:2 G

限制:> 1 G

频率 大致等于共振频率

Tick 基元 (Light Tick)

Tick 基元是一种急速剧烈的短效应,通常在较高的频率范围内运行。此基元也可描述为中等强度、较高频率的 Click,尾部较短。此基元也适用相同的指导原则,即在最初触发时使用电机过载或方波,并在结束时使用主动制动,以实现较短的电机上升和下降时间。图 7 显示了 Tick 基元的输出加速度配置文件的示例:

Tick 基元的输出加速度配置文件

图 7. 示例:Tick 基元的输出加速度配置文件

参数 指南
时长

目标:5 毫秒

限制:< 20 毫秒

峰值输出加速度

目标:CLICK 的一半,1 G

限制:介于 0.5 G 到 1 G 之间

频率

目标:2x 共振频率

限制:< 500 Hz

Low Tick 基元

Low Tick 基元是更轻、更柔和的 Light Tick,在较低的频率范围内运行,可以为效果提供更多请求体。此基元也可描述为中等强度、较低频率的 Click,旨在重复用于动态反馈。此基元也适用相同的指导原则,即在最初触发时使用电机过载或方波,以实现较短的电机上升时间。图 8 显示了 Low Tick 基元的输出加速度配置文件的示例:

Low Tick 基元的输出加速度配置文件

图 8. 示例:Low Tick 基元的输出加速度配置文件

参数 指南
时长

目标:12 毫秒

限制:< 30 毫秒

峰值输出加速度

目标:TICK 的四分之一,0.25 G

限制:介于 0.2 G 到 0.5 G 之间

频率

目标:2/3 共振频率

限制:< 100 Hz

线性调频基元

线性调频基元可以通过电压水平和振动频率的输入信号进行描述。电机在不同频率范围内能够输出的加速度因致动器的频率响应曲线而异。频率范围和电压水平需要针对每台设备进行调整。

Slow Rise 基元

Slow Rise 是指缓慢的向上振幅和频率扫描,以柔和的方式开始,在扫描过程中振动强度持续增加。此基元可通过振幅和频率始终一致的扫描来实现(使用不产生共振的较低频率范围)。图 9 显示了此实现的输入参数和输出加速度配置文件的示例。(红线与左侧的振幅标签相对应,表示振幅随时间的变化情况。蓝线与右侧的频率标签相对应,表示振动频率随时间的变化情况。)

Slow Rise 基元的输入参数和输出加速度配置文件

图 9. 示例:Slow Rise 基元的输入参数和输出加速度配置文件

如果电机的频率响应有限(在其共振频率之外响应不够强),则可以改为使用介于 1/2x 到 1x 共振频率之间的正弦扫描来实现。电机共振有助于在结束时达到信号峰值。

参数 指南
时长

目标:500 毫秒

容差:20 毫秒

峰值输出加速度

目标:0.5 G

限制:介于 0.5 G 到 1 G 之间

频率

目标:1/2 至 2/3 共振频率

替代方案:1/2 至 1x 共振频率

Quick Rise 基元

Quick Rise 是指速度更快的向上振幅和频率扫描,开始时较为柔和,而且在扫描过程中,振动强度会持续增加。输出加速度和振动频率的目标值应与 Slow Rise 基元相同,但实现这些值的持续时间更短。图 10 显示了 Quick Rise 基元的振动输入参数和输出加速度配置文件的示例。(红线与左侧的振幅标签相对应,表示振幅随时间的变化情况。蓝线与右侧的频率标签相对应,表示振动频率随时间的变化情况。)

Quick Rise 基元的输入参数和输出加速度配置文件

图 10. 示例:Quick Rise 基元的输入参数和输出加速度配置文件

参数 指南
时长

目标:150 毫秒

容差:20 毫秒

峰值输出加速度

目标:与 SLOW_RISE 相同

限制:与 SLOW_RISE 相同

频率

目标:与 SLOW_RISE 相同

替代方案:与 SLOW_RISE 相同

Quick Fall 基元

Quick Fall 是指快速的向下振幅和频率扫描,开始时较为柔和。在开始时,您可以使用较高的频率,并让电机迅速加速至峰值输出加速度。频率应在扫描过程中持续降低(即使是在电机上升期间)。图 11 显示了此实现的输入参数和输出加速度配置文件的示例。(红线与左侧的振幅标签相对应,表示振幅随时间的变化情况。蓝线与右侧的频率标签相对应,表示振动频率随时间的变化情况。)

Quick Fall 基元的输入参数和输出加速度配置文件

图 11. 示例:Quick Fall 基元的输入参数和输出加速度配置文件

参数 指南
时长

目标:100 毫秒

容差:20 毫秒

峰值输出加速度

目标:1 G

限制:介于 0.5 G 到 2 G 之间

频率

目标:2x 至 1x 共振频率

Thud 基元

Thud 是一种低沉的敲击效果,可模拟敲击空心木材的物理感觉。此基元在低频范围内运行,类似于 Low Tick 基元,可以为效果提供更多请求体。您可以将 Thud 基元实现在较低频率范围(最好低于 100 Hz)内进行的向下振幅和频率扫描。图 12 显示了此实现的输入参数和输出加速度配置文件的示例。(红线与左侧的振幅标签相对应,表示振幅随时间的变化情况。蓝线与右侧的频率标签相对应,表示振动频率随时间的变化情况。)

Thud 基元的输入参数和输出加速度配置文件

图 12. 示例:Thud 基元的输入参数和输出加速度配置文件

如果电机的频率响应有限,可考虑在开始时以共振频率发出全强度驱动信号,再降低至可感知的最低频率。使用这种方法时,您可能需要提高低频驱动信号的强度,才能感受到振动。

参数 指南
时长

目标:300 毫秒

容差:20 毫秒

峰值输出加速度

目标:0.25 G

限制:介于 0.2 G 到 0.5 G 之间

频率

目标:1/2 至 1/3 共振频率

替代方案:1x 至 1/2 共振频率

Spin 基元

Spin 用于模拟快速上下旋转的旋转动量,并在中心位置添加了轻微的强调符号。Spin 可以通过独立地在相反方向扫描振幅和频率,再进行反向运动来实现。请务必使用较低的频率范围(最好低于 100 Hz)。图 13 显示了此实现的输入参数和输出加速度配置文件的示例。(红线与左侧的振幅标签相对应,表示振幅随时间的变化情况。蓝线与右侧的频率标签相对应,表示振动频率随时间的变化情况。)

我们建议连续调用 Spin 基元两次(或在组合中调用三次),以实现旋转和不稳定的感觉。

如果电机的频率响应有限,则可以改为使用介于 1/2 到 1x 共振频率之间的快速正弦扫描来实现。电机共振会自动在信号正中添加强调符号。

Spin 基元的输入参数和输出加速度配置文件

图 13. 示例:Spin 基元的输入参数和输出加速度配置文件

参数 指南
时长

目标:150 毫秒

容差:20 毫秒

峰值输出加速度

目标:0.5 G

限制:介于 0.25 G 到 0.75 G 之间

频率

目标:2/3 至 1/3 共振频率,然后回到 1/2 共振频率

替代方案:2/3 至 1x 共振频率,然后回到 1/2 共振频率