Android 设备上最常见的振动致动器是线性共振致动器 (LRA)。LRA 可模拟在玻璃表面上点击按钮的感觉,而玻璃表面本身没有任何响应。清晰、响亮的点击反馈信号通常持续 10 到 20 毫秒。这种感觉让用户互动感觉更自然。对于虚拟键盘,这种点击反馈可以提高打字速度并减少错误。
LRA 具有几个常见的共振频率:
- 某些 LRA 的共振频率在 200 到 300 Hz 之间,这与人体皮肤对振动最敏感的频率一致。在这个频率范围内,振动感觉通常被描述为平滑、尖锐且穿透性强。
- 其他型号的 LRA 的共振频率较低,约为 150 Hz。从感官上来说,这种感觉更柔和、更饱满(在维度上)。
在两个不同频率下使用相同的输入电压时,振动输出幅度可能会有所不同。频率离 LRA 的共振频率越远,其振动幅度就越小。
给定设备的触感反馈效果同时使用振动致动器及其驱动程序。包含过载和主动制动功能的触感反馈驱动程序可以缩短 LRA 的上升时间和振铃时间,从而实现更灵敏、更清晰的振动。
设备上的默认波形平滑
举例来说,请考虑自定义波形模式在通用设备上的行为方式:
Kotlin
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
以下图表显示了与上述代码段对应的输入波形和输出加速度。请注意,每当模式中的振幅发生阶跃变化时(即 0 毫秒、150 毫秒、200 毫秒、250 毫秒和 700 毫秒),加速度都会逐渐增加,而不是突然增加。此外,振幅的每个步骤变化都会出现过冲,并且当输入振幅突然下降到 0 时,会出现明显的铃声,持续时间至少为 50 毫秒。
改进了触感反馈模式
为避免过冲并缩短振铃时间,请更缓慢地更改振幅。以下是修订版的波形和加速度图:
Kotlin
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
创建更复杂的触感反馈效果
令人满意的点击响应中的其他元素更为复杂,需要对设备中使用的 LRA 有一定的了解。为了获得最佳效果,请使用设备的预构建波形和平台提供的常量,以便执行以下操作:
- 执行清晰的效果和基元。
- 将它们串联起来,组合出新的触感反馈效果。
这些预定义的触感反馈常量和基元可以大大加快您的工作速度,同时创建高品质的触感反馈效果。