2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
ハプティクス UX デザイン
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
HAL と API の間で定数をマッピングするで導入された HAL - API 定数マッピングは、強く推奨される UX の設計原則に基づいています。UX の設計原則では、Android ハプティクス API を使用する際の方法、タイミング、使用する要素を定義しています。これらの基本原理について詳しくは、高度なハプティクス: 新しいハプティクス API を使用するタイミング、要素、方法をご覧ください。
図 1. HAL - API 定数マッピング: 非連続モデル
触覚効果を選択する
触覚強度の決定(VibrationEffect
)
希望の触覚強度(VibrationEffect
)を決定する際は、まず EFFECT_CLICK
から使用することをおすすめします。これは「軽い」触覚 EFFECT_TICK
と「重い」触覚 EFFECT_HEAVY_CLICK
の中間値であるためです。EFFECT_CLICK
から始めて、EFFECT_HEAVY_CLICK
で強度を上げるか EFFECT_TICK
で強度を下げることで、概念的なエネルギーを増減できます。なお、EFFECT_DOUBLE_CLICK
は反復的であるため、最も高い概念的なエネルギーが提供されます。
図 2.触覚強度の設定
目標が特定の入力イベント(長押し、スワイプなど)または UI 要素(キーボードなど)に関連する場合は、HapticFeedbackConstants
の中から事前定義された触覚定数を見つけます。各定数の名前は、KEYBOARD_PRESS
や LONG_PRESS
のような特定のユースケースを表します。
入力イベント(仮想ソフトボタン)のタッチ触覚フィードバックは、物理的な存在物(機械的なハードボタンなど)のボタン押下をシミュレートできます。
入力イベント: ペアのインタラクション フロー
クリック イベントは、機械的なボタンの動作(ボタンを押してから離す)をシミュレートするように設計されています。ボタンを押したときの機械的な押し込み力で知覚されるエネルギーは、ボタンを離したときよりも強くなります。したがって、ボタンを押すことによる触覚フィードバックは、ボタンを離すことによる触覚フィードバックよりも強力です。
図 3. バイナリ入力イベントによって生成される触覚効果
触覚強度: ボタン押下のアフォーダンス
より短く、より軽い動作の入力イベントは、軽い触覚に関連付けられます。より長く、より深い動作の入力イベントは、強い触覚に関連付けられます。
図 4. アフォーダンスによって生成される触覚効果
ジェスチャー入力イベントで仮想テクスチャをシミュレートする
指が画面のビジュアル UI 上を移動すると、ジェスチャー ベースの入力(スクラブ操作やスクロールなど)を仮想触覚テクスチャと一致させることができます。たとえば、指が時計 UI 上を移動すると、仮想目盛りが UI 要素をマークし、繰り返し触覚フィードバックを生成します。
仮想触覚テクスチャの効果は反復的です。その結果、通常は知覚されるエネルギーが実際の大きさよりも高くなります(効果が繰り返されない場合、または 1 回だけ発生する場合)。したがって、仮想触覚テクスチャ(CLOCK_TICK
や TEXT_HANDLE_MOVE
など)向けに設計された触覚定数は、繰り返されるキューを通じて動きの感覚を生成するだけの小さいものでなければなりません。
図 5. 仮想テクスチャをシミュレートする触覚効果
感情を含める
触覚効果にポジティブな感情またはネガティブな感情を含めるには、ネガティブな感情に強い感度を適用してユーザーの関心を引きます。
図 6. 感情を含む触覚効果
長いバイブレーション時の可聴音を防ぐ
注意喚起触覚の長いバイブレーションによる可聴音の発生を防ぐには、バイブレーションをスムーズに加速して段階的に増強する効果を生成します。これを行うには、createWaveform(long[] timings, int[] amplitudes, int repeat)
を使用します。
図 7. 長いバイブレーションの段階的な増強効果
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-10 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-10 UTC。"],[],[],null,["# Haptics UX design\n\nThe HAL-API constants mapping introduced in [Map constants between HAL and API](/docs/core/interaction/haptics/haptics-map-constants)\nis driven by highly recommended UX design principles.\nThe UX design principles define the foundation of how, when, and what to use\nwhen using Android haptics APIs. See\n[Advanced Haptics: The When, What, and How of New Haptic APIs](https://youtu.be/00jRoEFnpk8)\nto learn more about these foundational principles.\n\n**Figure 1.** HAL-API constant mapping: Discrete model\n\nSelect haptic effects\n---------------------\n\n### By haptic strength (`VibrationEffect`)\n\n`EFFECT_CLICK` is the best place to start when determining your preferred haptic\nstrength ([`VibrationEffect`](https://developer.android.com/reference/android/os/VibrationEffect)):\nit's the median between the \"light\" haptics of `EFFECT_TICK` and the\n\"heavy\" haptics of `EFFECT_HEAVY_CLICK`. By starting with `EFFECT_CLICK`, you\ncan increase or decrease the conceptual energy by adding strength with\n`EFFECT_HEAVY_CLICK`, or decrease strength with `EFFECT_TICK`. Keep in mind,\n`EFFECT_DOUBLE_CLICK` delivers the highest conceptual energy because it's\nrepeated.\n\n**Figure 2.** Haptic strength settings\n\n### By input events and UI elements (`HapticFeedbackConstants`)\n\nIf your goal is associated with specific input events (like long press, or\nswipe), or UI elements (like keyboard), find predefined haptic constants in\n[`HapticFeedbackConstants`](https://developer.android.com/reference/android/view/HapticFeedbackConstants).\nThe name of each constant refers to specific use cases like `KEYBOARD_PRESS`, or\n`LONG_PRESS`.\n\nSimulate real-world button-press events\n---------------------------------------\n\nThe touch haptic feedback of input events (virtual soft buttons) can simulate\nbutton presses using physical entities (such as mechanical hard buttons).\n\n### Input event: Pairwise interaction flow\n\nThe click event is designed to simulate the behavior of a mechanical button,\nwhich is *pressed* then *released*. The perceived energy of the mechanical\nimpulse from a button press is higher than that of a button release. Therefore,\nthe haptic feedback for button presses is stronger than the haptic feedback for\nbutton releases.\n\n**Figure 3.** Haptic effects by binary input event\n\n### Haptic strength: The affordance of button press\n\nInput events with shorter and lighter engagement are associated with *lighter*\nhaptics. Input events with longer and deeper engagement are associated with\n*stronger* haptics.\n\n**Figure 4.** Haptic effects by affordance\n\nSimulate virtual texture in gesture input event\n-----------------------------------------------\n\nGesture-based input (like scrubbing or scrolling) can be aligned with virtual\nhaptic textures while the finger is moving on the screen along with visual UIs,\nfor example, generating repeated haptic feedback while a finger is moving around\nthe clock UI with virtual tick mark UI elements.\n\nEffects for virtual haptic textures are meant to be repeated. This often makes\nthe perceived energy higher than the amplitude (when the effect is called\n*without repetition* , or *only once* ). Because of this, haptic constants that\nare designed for virtual haptic textures (like `CLOCK_TICK` or\n`TEXT_HANDLE_MOVE`) must be *subtle* to provide the feeling of movement through\nrepeated cues.\n\n**Figure 5.** Haptic effects to simulate virtual texture\n\nInclude sentiments\n------------------\n\nTo include positive or negative sentiment in haptic effects, apply stronger\nsensation to negative sentiment to get the user's attention.\n\n**Figure 6.** Haptic effects with sentiment\n\nAvoid audible noise from long vibration\n---------------------------------------\n\nTo avoid audible noise from long vibration for attentional haptics, accelerate\nthe pattern smoothly to create a ramp-up effect. Do this by using\n[`createWaveform(long[] timings, int[] amplitudes, int repeat)`](/docs/core/interaction/haptics/haptics-ux-foundation#ease-in).\n\n**Figure 7.** Long vibration ramp-up effect"]]