觸覺技術最基本的用途之一,就是向使用者互動提供意見回饋。時間挑選器、虛擬鍵盤按鍵和文字選取都是常見的觸覺回饋良好用途範例。如要進一步瞭解套用觸覺技術的時機和方式,請參閱觸覺技術設計原則。
本頁說明提供觸覺回饋的三種方式。
- 使用
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
。
必要條件:載入震動器和 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,請參閱建立自訂觸覺效果一文。