振动致动器入门

在 Android 设备上设计触感反馈效果之前,建议您先了解 振动致动器的工作原理概览。

触感反馈 LRA 的组件示意图

最常见的振动致动器是线性共振致动器 (LRA)。每个 LRA 由一个音圈组成,它压在了一个磁性移动质量上, 附着在弹簧上向音圈中施加交流电压可以产生 导致质量移动的电磁力该弹簧为 使质量回到起始位置的力通过 质量来回移动会使 LRA 振动。他们有 输出最大输出的共振频率。

如果输入电压相同,但频率不同,则振动输出 振幅可能不同。频率越偏离 LRA 的 共振频率,其振动振幅越低。

LRA 在设备中的一项常见功能是模拟按钮的感觉 点击无响应的玻璃表面有助于营造良好的用户互动体验 更自然。在通过虚拟键盘输入内容时,点击反馈可以 提高输入速度并减少错误。清晰的点击反馈信号 持续时间通常不到 10 到 20 毫秒。获得理想的点击 需要对设备中使用的 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 // Do not 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 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

下图显示了与所示代码段对应的波形 。

步进函数输入波形图

相应的加速度如下所示:

实际测量波形的曲线图,显示关卡之间的更多自然过渡

请注意,只要有加速度, 模式中振幅的步进变化(例如,在 0 毫秒、150 毫秒、200 毫秒、250 毫秒 700 毫秒)。振幅的每一步变化也存在过冲, 在输入振幅突然增加时, 降至 0。

这种触感反馈模式可以通过调高和调低振幅 循序渐进地避免过载并缩短响铃时间下面显示了 修订版的波形和加速度图。

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));

包含其他步骤的输入波形图

测量的波形图,显示更平滑的过渡

因此,要在 Android 设备上创建触感反馈效果需要的不仅仅是 提供频率和振幅值。设计 从零开始打造触感反馈效果,而无需全面获取工程规范 和驱动装置Android API 提供了一些常量, 可让您执行以下操作:

  • 执行清晰的效果和基元

  • 将它们串联起来以形成新的触感反馈效果。

这些预定义的触感反馈常量和基元可以大大加快您的工作速度 同时确保高品质的触感反馈效果。