View コンポーネント、事前定義された VibrationEffect API、VibrationEffect.Builder を使用したタイムライン アンカー付きコンポジションを使用して、Android アプリに触覚フィードバックを実装します。 キーワード(公開): > Android 開発、ハプティクス、触覚フィードバック、UI、ビュー、VibrationEffect、View.performHapticFeedback、Vibrator、触覚定数
ハプティクスのもっとも基本的なユースケースの一つは、ユーザー操作に対するフィードバックを提供することです。時間選択ツール、仮想キーボードのキープレス、テキスト選択は、触覚フィードバックの適切なユースケースの一般的な例です。ハプティクスを適用するタイミングと方法について詳しくは、ハプティクス設計の原則をご覧ください。
このページでは、触覚フィードバックを提供する 3 つの方法について説明します。
Viewを使用します(推奨)。このアプローチはアクション指向で、最も幅広くサポートされており、VIBRATE権限は必要ありません。- 事前定義された
VibrationEffectを使用します。このアプローチは柔軟性が高いですが、トレードオフがあります。 VibrationEffect.Builderを使用して、タイムライン アンカー付きコンポジションを使用します。このアプローチは最も柔軟性が高く、プリセット、エンベロープ、その他のバイブレーション要素をタイムラインに沿ってシーケンスできます。また、自動フォールバック サポートが組み込まれています。
これらのメソッドは、デバイスレベルで定義されたプリミティブを使用して、手元のデバイスに合わせた高品質のフィードバックを提供します。
すべての触覚フィードバック メソッドは、デフォルトでユーザーのタップ フィードバック設定を尊重します。
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.Builder を使用してコンポジションを作成する
Android 16(26Q4)以降、VibrationEffect.Builder API は、タイムラインに沿って個別のプリセット、エンベロープ、その他のバイブレーション要素をシーケンスすることで、カスタムの触覚フィードバックを作成する最も柔軟で表現力豊かな方法を提供します。さらに、VibrationEffect.Builder で作成されたコンポジションには、サポートされている要素全体で自動フォールバックが組み込まれています。
VibrationEffect.Builder(および VibrationEffect.Composition API)を使用した触覚効果の作成については、カスタムの触覚効果を作成するで詳しく説明しています。