實作常數和原始類型

觸覺常數和基本體是由 Vibrator HAL 定義,並由 Android 架構對應至公開 API。請進行下列檢查,判斷裝置是否符合實作觸覺回饋的基本規格:

觸覺回饋實作流程圖

圖 2. 實作效果

實作基本體的步驟流程圖

圖 3. 實作原始物件

導入常數

開發人員可以透過 VibrationEffect.createPredefined() 使用 VibrationEffect 中的觸覺常數。請查看下列觸覺常數的實作狀態。

觸覺常數 地點和摘要
EFFECT_TICKEFFECT_CLICKEFFECT_HEAVY_CLICKEFFECT_DOUBLE_CLICK VibrationEffect 類別
VibrationEffect 中的觸覺常數不含任何輸入事件概念,也沒有 UI 元素。常數包括能源等級的概念,例如 EFFECT_CLICKEFFECT_HEAVY_CLICK,這些常數會由 createPredefined() 呼叫。

如果裝置未實作 VibrationEffect 常數,就會執行下文所述的替代震動模式。建議更新這些設定,讓裝置發揮最佳效能。

  • EFFECT_CLICK

    使用 VibrationEffect.createWaveform 建立波形震動,並在 frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern 設定時間。

  • EFFECT_HEAVY_CLICK

    使用 VibrationEffect.createWaveform 建立波形震動,並在 frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern 設定時間。

    • EFFECT_DOUBLE_CLICK

    使用 VibrationEffect.createWaveform 和時間 (0、30、100、30) 建立波形震動。

  • EFFECT_TICK

    使用 VibrationEffect.createWaveform 建立波形震動,並在 frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern 設定時間。

測試觸覺回饋的步驟流程圖

圖 4. 實作意見回饋常數

開發人員可以透過 View.performHapticFeedback() 使用 HapticFeedbackConstants 中的觸覺常數。請檢查下列公開回饋常數的狀態。

觸覺常數 地點和摘要
CLOCK_TICKCONTEXT_CLICKKEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAPLONG_PRESSTEXT_HANDLE_MOVEVIRTUAL_KEYVIRTUAL_KEY_RELEASECONFIRMREJECTGESTURE_STARTGESTURE_END HapticFeedbackConstants 類別
HapticFeedbackConstants 中的觸覺常數可輔助特定 UI 元素 (例如 KEYBOARD_PRESSKEYBOARD_RELEASE) 的輸入事件,這些元素會由 performHapticFeedback() 呼叫。

實作原始物件

VibrationEffect.Composition 中的觸覺基本型別具有可調整的強度,開發人員可透過 addPrimitive(int primitiveId, float scale, int delay) 使用。基本型別可分為兩類:

  • 短基元:時間較短的基元,通常少於 20 毫秒。這類基元包括 CLICKTICKLOW_TICK

  • 啁啾基元:振幅和頻率各異的基元,通常比短基元持續時間更長。包括 SLOW_RISEQUICK_RISEQUCK_FALLTHUDSPIN

Short 原始型別

震動馬達輸出加速度設定檔可描述短基元。使用的絕對頻率會因每個基元而異,取決於致動器的共振頻率。如要進一步瞭解硬體設定和輸出測量工具,請參閱「設定測試設備」。

脈衝與鈴聲比率 (PRR) 是短震動的重要品質指標,如圖 5 所示。PRR 定義為主脈衝 (由振幅降至峰值振幅 10% 的時間範圍內訊號定義) 與鈴聲脈衝 (由振幅從峰值振幅 10% 降至峰值振幅 1% 以下的訊號定義) 之間的比例。PRR 的公式如下:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

如要進一步瞭解 PRR,請參閱「分析波形」一文;如要進一步瞭解如何分析及比較結果,請參閱「使用效能地圖比較結果」一文。

脈衝與鈴聲比率

圖 5. 脈衝與鈴聲比率定義

將短基元套用為使用者輸入回饋,或在較長的合成音樂中播放,以建立柔和的紋理。也就是說,這些音效通常會頻繁觸發,並快速連續播放。單一短基元的感知強度可能會加劇整體效果強度。因此,請使用較大的組合 (例如連續 100 個刻度),校正單一刻度或低刻度原始值。

按一下基本體

點擊基本元素通常會在接近裝置共振頻率的頻率運作,以在短時間內達到最大輸出,產生強勁清脆的震動效果。比其他基本動作更強大、更深入,可發揮最大強度。

如果可以,請在開始時使用馬達超速,結束時使用主動煞車, 以縮短馬達上升和下降時間。對於某些馬達,使用方波而非正弦波可加快加速速度。圖 6 顯示點擊基本體的輸出加速設定檔範例:

按一下基本輸出加速設定檔

圖 6. 點擊基本體的輸出加速設定檔範例

參數 指南
時間長度

目標:12 毫秒

限制:< 30 毫秒

輸出內容加速

目標:2G

限制:大於 1 GB

頻率 大約在共振頻率

勾號原始物件 (淺色勾號)

勾號基本型是尖銳的短效,通常運作於較高的頻率範圍。這種原始手勢也可以描述為中等強度點擊,頻率較高,且尾端較短。如要使用馬達過驅動或方波來達到短暫的上升時間,並在偏移時主動煞車,也適用相同的指引。圖 7 顯示勾號基本體的輸出加速設定檔範例:

勾選原始輸出加速設定檔

圖 7. 勾號基本體的輸出加速設定檔範例

參數 指南
時間長度

目標:5 毫秒

限制:< 20 毫秒

輸出內容加速

目標:CLICK的一半,即 1 GB

限制:介於 0.5 GB 和 1 GB 之間

頻率

目標:2 倍共振頻率

限制:< 500 Hz

低勾號基元

低音勾是柔和、較弱的光音勾版本,運作頻率範圍較低,可為效果提供更多主體。這種原始觸覺回饋也可以描述為低頻率的中等強度點擊,目的是重複用於動態回饋。使用馬達過驅動或方波來達到初始發作的短上升時間時,也適用相同的指引。圖 8 顯示低速勾選基本體的輸出加速設定檔範例:

低勾號原始輸出加速設定檔

圖 8. 低勾號基本體的輸出加速設定檔範例

參數 指南
時間長度

目標:12 毫秒

限制:< 30 毫秒

輸出內容加速

目標:1/4 個 TICK,0.25 G

限制:介於 0.2 G 和 0.5 G 之間

頻率

目標:2/3 共振頻率

限制:< 100 Hz

Chirp 基元

電壓位準和震動頻率的輸入訊號可描述 Chirp 基本體。馬達在不同頻率範圍內輸出的加速度,取決於致動器的頻率響應曲線。您必須根據個別裝置調整頻率範圍和電壓位準。

緩慢上升原始版本

緩慢上升:振幅和頻率緩慢向上掃動,開始時較輕柔,掃動期間震動強度會持續增加。可透過持續掃描振幅和頻率來實作,並使用共振頻率範圍以外的較低頻率範圍運作。圖 9 顯示此實作的輸入參數和輸出加速設定檔範例。(紅線與左側的振幅標籤相符,代表振動振幅隨時間變化的情形。藍線對應右側的頻率標籤,代表震動頻率隨時間變化的情形。

慢速上升基元的輸入參數和輸出加速設定檔

圖 9.輸入參數和輸出加速設定檔範例,適用於緩慢上升的原始項目

如果馬達的頻率響應受到限制 (共振頻率以外的頻率不夠強),替代做法是從共振頻率的 1/2 倍掃描至 1 倍的正弦波。馬達共振有助於在結尾達到訊號峰值。

參數 指南
時間長度

目標:500 毫秒

容許範圍:20 毫秒

輸出內容加速

目標:0.5 G

限制:介於 0.5 GB 和 1 GB 之間

頻率

目標:共振頻率的 1/2 至 2/3

替代方案:1/2 至共振頻率

快速上升原始物件

快速上升:振幅和頻率會快速向上掃動,且掃動期間的震動強度會持續增加,但開始時會較為緩和。輸出加速和震動頻率目標應與緩慢上升的原始目標相同,但時間較短。圖 10 顯示震動輸入參數,以及慢速上升基本體的輸出加速度設定檔範例。(紅線與左側的振幅標籤相符,代表振動振幅隨時間變化的情形。藍線對應右側的頻率標籤,代表震動頻率隨時間變化的情形。

快速上升圖元的基本輸入參數和輸出加速設定檔

圖 10. 輸入參數和輸出加速設定檔範例,適用於快速上升基本項目

參數 指南
時間長度

目標:150 毫秒

容許範圍:20 毫秒

輸出內容加速

目標:與「SLOW_RISE」相同

限制:與 SLOW_RISE 相同

頻率

目標:與「SLOW_RISE」相同

替代方式:與「SLOW_RISE」相同

快速掉落原始物件

快速下降是指振幅和頻率快速向下掃動,且起音柔和。馬達加速達到最高輸出加速度時,您可以使用較高的頻率做為起點。頻率應在掃描期間持續下降,即使在上升時間也是如此。圖 11 顯示輸入參數,以及這項實作的輸出加速設定檔範例。(紅線與左側的振幅標籤相符,代表振動振幅隨時間變化的情形。藍線對應右側的頻率標籤,代表震動頻率隨時間變化的情形。

快速跌倒原始項目的輸入參數和輸出加速設定檔

圖 11. 輸入參數和輸出加速設定檔範例,適用於快速跌倒原始型別

參數 指南
時間長度

目標:100 毫秒

容許範圍:20 毫秒

輸出內容加速

目標:1 G

限制:介於 0.5 GB 和 2 GB 之間

頻率

目標:共振頻率的 2 倍至 1 倍

Thud 原始物件

「咚」是低沉的打擊效果,模擬敲擊空心木頭的感覺。這個基元會在低頻範圍內運作,類似於低頻刻度基元,可為效果提供更多主體。您可以將重擊原始型別實作為低頻率範圍 (最好低於 100 Hz) 的振幅和頻率向下掃描。圖 12 顯示輸入參數,以及這項實作的輸出加速設定檔範例。(紅線與左側的振幅標籤相符,代表振動振幅隨時間變化的情形。藍線對應右側的頻率標籤,代表震動頻率隨時間變化的情形。

Thud 原始物件的輸入參數和輸出加速設定檔

圖 12. 輸入參數和 thud 基本體的輸出加速設定檔範例

如果馬達的頻率響應受到限制,替代做法是從共振頻率的全強度驅動訊號開始,然後降至仍可感知的最低頻率。這種做法可能需要提高低頻率的驅動訊號強度,才能感受到震動。

參數 指南
時間長度

目標:300 毫秒

容許範圍:20 毫秒

輸出內容加速

目標:0.25 G

限制:介於 0.2 G 和 0.5 G 之間

頻率

目標:共振頻率的 1/2 至 1/3

替代方案:共振頻率的 1 倍到 1/2 倍

旋轉基元

旋轉會模擬快速上下旋轉的旋轉動量,並在中心略微加重。如要實作旋轉效果,請分別掃動振幅和頻率,並朝相反方向移動,然後再反向移動。請務必使用較低的頻率範圍 (最好低於 100 Hz)。圖 13 顯示輸入參數,以及這項實作的加速設定檔輸出範例。(紅線與左側的振幅標籤相符,代表振動振幅隨時間變化的情形。藍線對應右側的頻率標籤,代表震動頻率隨時間變化的情形。

建議您在組合中連續呼叫兩次或三次旋轉原始值,以產生旋轉和不穩定的感覺。

如果馬達的頻率響應受到限制,替代做法是從共振頻率的 1/2x 快速掃描至 1x,然後再掃描回來。馬達共振會自動在訊號中間加上重音。

旋轉基本體的輸入參數和輸出加速設定檔

圖 13. 輸入參數和旋轉基本體的輸出加速設定檔範例

參數 指南
時間長度

目標:150 毫秒

容許範圍:20 毫秒

輸出內容加速

目標:0.5 G

限制:介於 0.25 G 和 0.75 G 之間

頻率

目標:2/3 至 1/3,然後回到共振頻率的 1/2

替代方案:2/3 至 1 倍,然後回到共振頻率的 1/2