觸覺回饋最基本的用途之一,就是為使用者互動提供回饋。時間挑選器、在虛擬鍵盤上按下按鍵,以及文字選取,都是觸覺回饋的常見用途。如要進一步瞭解何時及如何套用觸覺技術,請參閱「觸覺技術設計原則」。
本頁面將說明三種提供觸覺回饋的方式。
- 使用
View
(建議做法)。這個方法以動作為導向,支援範圍最廣,且不需要VIBRATE
權限。 - 使用預先定義的
VibrationEffect
。這種做法雖然更具彈性,但也有一些取捨。 - 使用原始元素進行進階合成。這個方法較新且更具彈性,但需要特定裝置支援。
這些方法會使用在裝置層級定義的原始碼,針對手邊的裝置提供高品質的回饋。
根據預設,所有觸覺回饋方法都會遵循使用者的觸控回饋設定。
使用 View
元件產生觸覺回饋
使用 View.performHapticFeedback
方法產生觸覺回饋。HapticFeedbackConstants
定義的觸覺常數著重於應用程式中的功能,而非執行的觸覺效果類型。
基礎實作方式可能因裝置和硬體功能而異,但應用程式只需考量在特定情境中要提供的意見回饋類型。您可以專注於功能,為類似互動啟用觸覺回饋。使用者會學習將不同的觸覺感受與不同的意義建立關聯。
前置條件:啟用觸覺回饋
只要 View
可見,觸覺回饋即可用於事件。某些事件 (例如長按) 會在檢視畫面上的監聽器處理事件 (傳回 true
) 時觸發預設觸覺回饋。
Android View
可以將 View.hapticFeedbackEnabled
屬性設為 false
,藉此停用觸覺回饋。停用此屬性會導致預設的意見回饋。
performHapticFeedback
方法也會遵循系統設定 HAPTIC_FEEDBACK_ENABLED
,讓使用者有機會為整個系統停用這些設定。
與其他觸覺回饋 API 不同,使用 HapticFeedbackConstants
搭配 View
不需要 VIBRATE
權限。
選擇 HapticFeedbackConstant
將 View
元件與 HapticFeedbackConstants
搭配使用時,您不必評估特定裝置支援情形,因為這些常數會在必要時提供備用行為。唯一需要考量的只有所需常數的 SDK 級別。
範例 1:按鍵
以下範例說明如何使用觸控事件監聽器,在 View
中為觸控輸入內容新增觸覺回饋。這些效果模擬按下按鈕再放開的感受。
Kotlin
class HapticTouchListener : View.OnTouchListener { override fun onTouch(View view, MotionEvent event) : Boolean { when (event.actionMasked) { MotionEvent.ACTION_DOWN -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) MotionEvent.ACTION_UP -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE) } return true } }
Java
class HapticTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); break; case MotionEvent.ACTION_UP: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE); break; } return true; } }
範例 2:提交按鈕
觸覺回饋的用途不僅模擬與裝置的實體互動,也可能用來傳達抽象意義。舉例來說,使用者一般會期待 CONFIRM
效果是短暫輕微的震動,而 REJECT
可能會是更強烈的回饋,用來表示失敗。如以下提交按鈕意見回饋範例所示。
Kotlin
submitButton.setOnClickListener { view -> val successful = performSubmit() if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM) } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT) } }
Java
submitButton.setOnClickListener(view -> { boolean successful = performSubmit(); if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM); } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT); } });
使用預先定義的 VibrationEffect
產生觸覺回饋
使用 View
為基礎的方法,可著重於使用者互動。這在系統中保持一致性時是首選。不過,您也可以叫用特定預先定義的 VibrationEffect
API,以便使用自訂的觸覺回饋效果。
預先定義的效果可做為 VibrationEffect
常數使用,並可檢查是否支援,以及透過 Vibrator
服務播放,如以下範例所示。
瞭解 VibrationEffect
API 的裝置支援情形
在基本用途中,您不必檢查個別 VibrationEffect
API 是否受支援。Vibrator.areEffectsSupported
和 Vibrator.areAllEffectsSupported
等 API 可用於判斷裝置是否有常數的自訂實作項目。如果沒有自訂特效,應用程式仍可播放特效,並使用平台定義的備用實作項目。
詳情請參閱「預先定義的 VibrationEffect
」。
先決條件:載入 Vibrator 和 VIBRATE
權限
大部分的震動效果都可以透過 Vibrator
服務播放,您可以按照以下方式載入:
Kotlin
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Java
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
應用程式必須具備 VIBRATE
權限,才能使用這項服務讓裝置震動。您可以將權限新增至應用程式資訊清單檔案:
<uses-permission android:name="android.permission.VIBRATE"/>
播放預先定義的 VibrationEffect
您可以使用 VibrationEffect.createPredefined
準備預先定義的效果,然後在 Vibrator
上使用 vibrate
方法播放。
這個範例會播放「點擊」效果。
Kotlin
val vibrator = context.getSystemService(Vibrator::class.java) ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
Java
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
使用原始元素進行進階合成
VibrationEffect.Composition
API 提供其他觸覺回饋選項。不過,與效果不同,這些基本元素沒有系統層級的備用方案,因此必須仔細留意裝置支援的基本元素和其他功能。
如要進一步瞭解如何使用這些 API,請參閱「建立自訂觸覺效果」一文。