在 HAL 和 API 之間對應常數

本頁面列出公開 HAL 常數與 API 常數之間的建議對應關係。如果評估的硬體未實作 HAL 常數,請更新「實作常數和基本型別」頁面所述的回退模式,產生類似的輸出內容。這項對應作業會由兩種不同的預設模型輔助:

  • 離散模型 (簡單)

    • 這個模型的主要變數是振幅。HAL 中的每個實體都代表不同的觸覺回饋幅度。
    • 這是實作基本觸覺 UX 的最低需求。
    • 如要提供更進階的觸覺 UX,需要進階硬體和進階模型 (連續模型)。
  • 持續模式 (進階)

    • 紋理和振幅是這個模型的主要變數。HAL 中的每個實體都代表不同的觸覺紋理。每個 HAL 實體的振幅都由比例因子 (S) 控制。
    • 這個模型需要進階硬體。如果原始設備製造商 (OEM) 想搭配 VibrationEffect.Composition 使用進階觸覺使用者體驗 (充分運用最新觸覺 API),建議採用這個模型實作硬體。

離散模型

建議將 API 中提供的所有公開常數,對應至適當的 HAL 常數。如要開始這個程序,請找出裝置可在 HAL 中定義的離散振幅觸覺波形數量。圍繞這個概念的具體問題如下:我的手機可以定義多少個單一脈衝觸覺效果,且這些效果的振幅差異可讓人體感知?這個問題的答案會決定對應關係。

定義 HAL 常數是與硬體相關的程序。舉例來說,入門款手機可能只有產生單一觸覺波形的硬體功能。搭載更先進硬體元件的裝置可產生更廣泛的離散振幅等級,並在 HAL 中定義多個觸覺波形。HAL-API 常數對應會採用 HAL 常數 (以中等振幅為基準),然後從中安排較強或較弱的效果。

HAL 常數範圍和回饋振幅的示意圖

圖 14. 依振幅劃分的 HAL 常數範圍

定義具有離散振幅的 HAL 常數數量後,即可依據 HAL 常數數量對應 HAL 和 API 常數。這個對應程序最多可將單一脈衝 API 常數區隔為三組不同的振幅等級。API 常數的區隔方式是根據隨附輸入事件的 UX 原則。詳情請參閱「觸覺回饋 UX 設計」。

HAL-API 常數對應的離散模型

圖 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 常數範圍

圖 16. 依紋理 (HAL_H0) 和振幅比例 (S) 劃分的 HAL 常數範圍

HAL-API 常數對應的連續模型

圖 17. HAL-API 常數對應:連續模型

在連續模型中,不同的 HAL 常數代表不同的觸覺紋理,而非不同的振幅;比例因子 (S) 可設定振幅。不過,由於紋理的感知 (例如銳利度) 與時間長度和振幅的感知有關,因此建議結合紋理和比例係數 (在 HAL-API 對應的設計程序中)。

圖 18 說明常數對應,從一個 HAL 到多個 API 常數,變異程度會隨著振幅可擴充性而增加。

增加變化版本 1

增加變異 2

圖 18. 透過振幅可擴充性增加變化

對於 VibrationEffect.Composition 中的所有可擴充 API 常數 (例如 PRIMITIVE_TICKPRIMITIVE_CLICK),API 常數的能量級別取決於透過 addPrimitive(int primitiveID, float scale, int delay) 宣告 API 常數時的 float scale 參數。PRIMITIVE_TICKPRIMITIVE_CLICK 可以使用不同的 HAL 常數設計,如要為紋理新增變化,建議採用這種做法。