本页介绍了公共 HAL 常量和 API 常量之间的推荐映射。如果评估的硬件未实现 HAL 常量,请更新实现常量和基元页面中所述的回退模式,以生成类似输出。映射由两个不同的默认模型辅助完成:
离散模型(简单)
- 振幅是此模型的关键变量。HAL 中的每个实体都代表一个不同的触感反馈振幅。
- 此模型是实现基本触感反馈用户体验的最低要求。
- 如需实现更高级的触感反馈用户体验,需要使用高级硬件和高级模型(连续模型)。
连续模型(高级)
- 纹理和振幅是此模型的关键变量。HAL 中的每个实体都代表不同的触感反馈纹理。每个 HAL 实体的振幅都由调节系数 (
S
) 控制。 - 此模型需要高级硬件。如果原始设备制造商 (OEM) 想要通过
VibrationEffect.Composition
(以充分利用最新的触感反馈 API)实现高级触感反馈用户体验,建议使用此模型实现其硬件。
- 纹理和振幅是此模型的关键变量。HAL 中的每个实体都代表不同的触感反馈纹理。每个 HAL 实体的振幅都由调节系数 (
离散模型
建议将该 API 中提供的所有公共常量与相应的 HAL 常量进行映射。如需开始此过程,请了解设备可以在 HAL 中指定多少个具有离散振幅的触感反馈波形。围绕该概念产生的具体问题类似于:我的手机中可以指定多少个具有人类可感知的振幅差异的单脉冲触感反馈效果?此问题的答案决定了需要执行的映射。
指定 HAL 常量的过程依赖于硬件。例如,入门级手机的硬件功能可能只能产生单个触感反馈波形。配备更高级硬件组件的设备可以产生更广泛的离散振幅级别,并在 HAL 中指定多个触感反馈波形。在进行 HAL-API 常量映射时,需要先选取 HAL 常量(使用中等振幅作为基准),然后以此为基础安排更强或更弱的效果。
图 14. HAL 常量范围(按振幅)
指定具有离散振幅的 HAL 常量的数量之后,就该按 HAL 常量的数量映射 HAL 和 API 常量了。此映射过程最多可将一个单脉冲 API 常量细分为三组离散的振幅级别。API 常量的细分方式以伴随的输入事件的用户体验原则为基础。如需了解详情,请参阅触感反馈用户体验设计。
图 15. HAL-API 常量映射:离散模型
如果您的设备仅支持两个具有离散振幅的 HAL 常量,请考虑合并“中”和“高”振幅级别的 HAL 常量。在实践中,此概念的一个示例为:将 EFFECT_CLICK
和 EFFECT_HEAVY_CLICK
映射到同一 HAL 常量,这会是“中”振幅级别 HAL 常量。如果您的设备仅支持一个具有离散振幅的 HAL 常量,请考虑将所有三个级别合并为一个。
连续模型
可以通过应用具有振幅调节功能的连续模型来指定 HAL 常量。可将调节系数 (S
) 应用于 HAL 常量(例如,HAL_H0
和 HAL_H1
),以便生成经过调节的 HAL 常量 (HAL_H0
x S
)。在本示例中,经过调节的 HAL 会进行映射,以指定 API 常量 (HAL_H0
x S1
= H0S1
= EFFECT_TICK
),如图 16 所示。通过使用连续模型的振幅调节功能,设备可以存储具有独特纹理的少量 HAL 常量,并通过调整调节系数 (S
) 来添加振幅变体。设备制造商可以根据自己想要提供的不同触感反馈纹理的数量来指定 HAL 常量的数量。
图 16. HAL 常量范围(按纹理 [HAL_H0] 和振幅比例 [S])
图 17. HAL-API 常量映射:连续模型
在连续模型中,不同的 HAL 常量表示不同的触感反馈纹理,而不是不同的振幅;调节系数 (S
) 可以配置振幅。但是,由于对纹理的感知(例如,清晰度)与对持续时间和振幅的感知有关,因此建议在 HAL-API 映射的设计过程中将纹理和调节系数结合使用。
图 18 展示了利用振幅调节功能,通过增加变体将一个 HAL 常量映射到多个 API 常量的过程。
图 18. 利用振幅调节功能增加变体
对于所有可调节的 API 常量(例如 VibrationEffect.Composition
中的 PRIMITIVE_TICK
和 PRIMITIVE_CLICK
),其能量等级取决于通过 addPrimitive(int primitiveID, float scale,
int delay)
声明该常量时的 float scale
参数。通过使用不同的 HAL 常量,可以在设计 PRIMITIVE_TICK
和 PRIMITIVE_CLICK
时做出明确的区分。如果要添加纹理变体,建议使用此方法。