為活動新增觸覺回饋

觸覺回饋最基本的用途之一,就是為使用者互動提供回饋。時間挑選器、在虛擬鍵盤上按下按鍵,以及文字選取,都是觸覺回饋的常見用途。如要進一步瞭解何時及如何套用觸覺技術,請參閱「觸覺技術設計原則」。

本頁面將說明三種提供觸覺回饋的方式。

這些方法會使用在裝置層級定義的原始碼,針對手邊的裝置提供高品質的回饋。

根據預設,所有觸覺回饋方法都會遵循使用者的觸控回饋設定。

使用 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.areEffectsSupportedVibrator.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,請參閱「建立自訂觸覺效果」一文。