ハプティクスの最も基本的なユースケースの 1 つは、ユーザー操作に対するフィードバックを提供することです。時間選択ツール、仮想キーボードでのキー入力、テキスト選択は、ハプティクス フィードバックの適切なユースケースの一般的な例です。ハプティクスを適用するタイミングと方法について詳しくは、ハプティクス設計の原則をご覧ください。
このページでは、ハプティクス フィードバックを提供する 3 つの方法について説明します。
View
を使用する(推奨)。このアプローチはアクション指向で、最も広範にサポートされており、VIBRATE
権限は必要ありません。- 事前定義された
VibrationEffect
を使用する。このアプローチはより柔軟ですが、いくつかのトレードオフがあります。 - プリミティブで高度な合成を使用する。この方法は新しい方法で、より柔軟ですが、特定のデバイスのサポートが必要です。
これらのメソッドは、デバイスレベルで定義されたプリミティブを使用して、手持ちのデバイスに合わせて高品質のフィードバックを提供するものです。
すべてのハプティクス フィードバック方法は、デフォルトでユーザーのタッチ フィードバック設定を尊重します。
View
コンポーネントを使用してハプティクス フィードバックを生成する
View.performHapticFeedback
メソッドを使用してハプティクス フィードバックを生成します。HapticFeedbackConstants
で定義されたハプティクス定数は、実行されるハプティクス効果のタイプではなく、アプリ内の機能に重点を置いています。
基盤となる実装はデバイスとハードウェアの機能によって異なる場合がありますが、アプリは特定のコンテキストで提供するフィードバックの種類のみを考慮する必要があります。機能に焦点を当てることで、同様の操作に対してハプティクス フィードバックを有効にできます。ユーザーは、時間の経過とともに、さまざまな触覚にさまざまな意味を関連付けることを学びます。
前提条件: 触覚フィードバックを有効にする
View
が表示されている限り、そのイベントに触覚フィードバックを適用できます。長押しなどの一部のイベントには、ビューのリスナーがイベントを処理した場合(true
を返す場合)にトリガーされるデフォルトのハプティクスがあります。
Android View
では、View.hapticFeedbackEnabled
プロパティを false
に設定することで、ハプティクス フィードバックを無効にできます。このプロパティを無効にすると、デフォルトのフィードバックが返されます。
performHapticFeedback
メソッドは、システム設定 HAPTIC_FEEDBACK_ENABLED
も考慮します。これにより、ユーザーはシステム全体で無効にできます。
他のハプティクス API とは異なり、View
で HapticFeedbackConstants
を使用する場合、VIBRATE
権限は必要ありません。
HapticFeedbackConstant
を選択する
HapticFeedbackConstants
で View
コンポーネントを使用する場合、これらの定数は必要に応じてフォールバック動作するため、特定のデバイスのサポートを評価する必要はありません。考慮すべき点は、目的の定数の 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 の使用方法については、カスタム ハプティクス エフェクトを作成するをご覧ください。