イベントに触覚フィードバックを追加する

ハプティクスの最も基本的なユースケースの 1 つは、ユーザー操作に対するフィードバックを提供することです。時間選択ツール、仮想キーボードでのキー入力、テキスト選択は、ハプティクス フィードバックの適切なユースケースの一般的な例です。ハプティクスを適用するタイミングと方法について詳しくは、ハプティクス設計の原則をご覧ください。

このページでは、ハプティクス フィードバックを提供する 3 つの方法について説明します。

これらのメソッドは、デバイスレベルで定義されたプリミティブを使用して、手持ちのデバイスに合わせて高品質のフィードバックを提供するものです。

すべてのハプティクス フィードバック方法は、デフォルトでユーザーのタッチ フィードバック設定を尊重します。

View コンポーネントを使用してハプティクス フィードバックを生成する

View.performHapticFeedback メソッドを使用してハプティクス フィードバックを生成します。HapticFeedbackConstants で定義されたハプティクス定数は、実行されるハプティクス効果のタイプではなく、アプリ内の機能に重点を置いています。

基盤となる実装はデバイスとハードウェアの機能によって異なる場合がありますが、アプリは特定のコンテキストで提供するフィードバックの種類のみを考慮する必要があります。機能に焦点を当てることで、同様の操作に対してハプティクス フィードバックを有効にできます。ユーザーは、時間の経過とともに、さまざまな触覚にさまざまな意味を関連付けることを学びます。

前提条件: 触覚フィードバックを有効にする

View が表示されている限り、そのイベントに触覚フィードバックを適用できます。長押しなどの一部のイベントには、ビューのリスナーがイベントを処理した場合(true を返す場合)にトリガーされるデフォルトのハプティクスがあります。

Android View では、View.hapticFeedbackEnabled プロパティを false に設定することで、ハプティクス フィードバックを無効にできます。このプロパティを無効にすると、デフォルトのフィードバックが返されます。

performHapticFeedback メソッドは、システム設定 HAPTIC_FEEDBACK_ENABLED も考慮します。これにより、ユーザーはシステム全体で無効にできます。

他のハプティクス API とは異なり、ViewHapticFeedbackConstants を使用する場合、VIBRATE 権限は必要ありません。

HapticFeedbackConstant を選択する

HapticFeedbackConstantsView コンポーネントを使用する場合、これらの定数は必要に応じてフォールバック動作するため、特定のデバイスのサポートを評価する必要はありません。考慮すべき点は、目的の定数の 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 を使用して準備し、Vibratorvibrate メソッドのいずれかを使用して再生できます。

この例では、クリック効果を再生します。

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 の使用方法については、カスタム ハプティクス エフェクトを作成するをご覧ください。