在 HAL 和 API 之间映射常量

此页面介绍了公共 HAL 常量和 API 常量之间建议的映射。如果评估的硬件未实现 HAL 常量,请更新实现常量和基元页面中描述的后备模式,以生成类似的输出。映射由两个不同的默认模型辅助完成

  • 离散模型(简单)

    • 此模型的关键变量是振幅。HAL 中的每个实体代表不同的触感振幅。
    • 此模型是实现基本触感 UX 的最低要求。
    • 更高级的触感 UX 需要更高级的硬件和更高级的模型(连续模型)。
  • 连续模型(高级)

    • 此模型的关键变量是纹理和振幅。HAL 中的每个实体代表不同的触感纹理。每个 HAL 实体的振幅由比例因子 (S) 控制。
    • 此模型需要高级硬件。如果 OEM 想要将高级触感 UX 与 VibrationEffect.Composition(为了充分利用最新的触感 API)结合使用,建议使用此模型来实现其硬件。

离散模型

建议将 API 中提供的所有公共常量与相应的 HAL 常量进行映射。要开始此过程,请了解设备可以在 HAL 中定义多少个具有离散振幅的触感波形。围绕该概念构建的一个具体问题如下:我的手机可以定义多少个具有人眼可感知的振幅差异的单脉冲触感效果? 此问题的答案决定了映射。

定义 HAL 常量是一个依赖于硬件的过程。例如,入门级手机可能只有硬件能力来产生单个触感波形。具有更高级硬件组件的设备可以产生更广泛的离散振幅级别,并且可以在 HAL 中定义多个触感波形。HAL-API 常量映射采用 HAL 常量(以中等振幅作为基线),然后从此处安排更强或更弱的效果。

Diagram of HAL constant range and feedback
amplitudes

图 14. 按振幅划分的 HAL 常量范围

定义具有离散振幅的 HAL 常量数量后,就可以按 HAL 常量数量映射 HAL 和 API 常量了。此映射过程可以将单个脉冲 API 常量分段为最多三个离散的振幅级别组。API 常量的分段方式基于伴随输入事件的 UX 原则。有关详细信息,请参阅触感 UX 设计

Discrete model for HAL-API constant
mapping

图 15. HAL-API 常量映射:离散模型

如果您的设备仅支持两个具有离散振幅的 HAL 常量,请考虑合并中等和高等振幅级别 HAL 常量。此概念在实践中的一个示例是将 EFFECT_CLICKEFFECT_HEAVY_CLICK 映射到相同的 HAL 常量,这将是中等振幅级别 HAL 常量。如果您的设备仅支持一个具有离散振幅的 HAL 常量,请考虑将所有三个级别合并为一个。

连续模型

具有振幅可扩展性的连续模型可用于定义 HAL 常量。比例因子 (S) 可应用于 HAL 常量(例如,HAL_H0HAL_H1)以生成缩放的 HAL (HAL_H0 x S)。在这种情况下,缩放的 HAL 将映射以定义 API 常量 (HAL_H0 x S1 = H0S1 = EFFECT_TICK),如图 16 所示。通过使用连续模型的振幅可扩展性,设备可以存储少量具有独特纹理的 HAL 常量,并通过调整比例因子 (S) 来添加振幅变化。设备制造商可以根据他们想要提供的不同触感纹理的数量来定义 HAL 常量的数量。

HAL constant range by texture and
amplitude

图 16. 按纹理 (HAL_H0) 和振幅比例 (S) 划分的 HAL 常量范围

Continuous model for HAL-API constant
mapping

图 17. HAL-API 常量映射:连续模型

在连续模型中,不同的 HAL 常量代表不同的触感纹理,而不是不同的振幅;比例因子 (S) 可以配置振幅。但是,由于纹理的感知(例如,清晰度)与持续时间和振幅的感知相关,因此建议将纹理和比例因子(在 HAL-API 映射的设计过程中)结合起来。

图 18 说明了通过振幅可扩展性将常量从一个 HAL 映射到多个 API 常量,从而增加变化。

Increasing Varation
1

Increasing Varation
2

图 18. 通过振幅可扩展性增加变化

对于 VibrationEffect.Composition 中的所有可扩展 API 常量(例如 PRIMITIVE_TICKPRIMITIVE_CLICK),API 常量的能量级别取决于通过 addPrimitive(int primitiveID, float scale, int delay) 声明 API 常量时的 float scale 参数。PRIMITIVE_TICKPRIMITIVE_CLICK 可以通过使用不同的 HAL 常量来设计出明显的区别。如果您想为纹理添加变化,建议使用此方法。