為活動新增觸覺回饋

觸覺技術最基本的用途之一,就是向使用者互動提供意見回饋。時間挑選器、虛擬鍵盤按鍵和文字選取都是常見的觸覺回饋良好用途範例。如要進一步瞭解套用觸覺技術的時機和方式,請參閱觸覺技術設計原則

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

這些方法會使用裝置層級定義的基本功能,提供專為裝置而設的優質意見回饋。

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

使用 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

必要條件:載入震動器和 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,請參閱建立自訂觸覺效果一文。