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에서 손가락을 이리저리 움직이면 반복된 햅틱 반응이 생성됨).
가상 햅틱 텍스처의 효과는 반복적입니다. 이로 인해 (효과를 반복 없이 또는 한 번만 호출하는 경우) 인식되는 에너지가 진폭보다 높은 경우가 많습니다. 이로 인해, 가상 햅틱 텍스처용으로 설계된 햅틱 상수(예: CLOCK_TICK
또는 TEXT_HANDLE_MOVE
)는 반복된 신호를 통해 움직임의 느낌을 주기 위해 미묘해야 합니다.
그림 5. 가상 텍스처를 시뮬레이션하는 햅틱 효과
감정 포함
햅틱 효과에 긍정적인 감정이나 부정적인 감정을 포함하려면 부정적인 감정에 더 강한 감각을 적용하여 사용자의 주의를 끕니다.
그림 6. 감정을 포함한 햅틱 효과
긴 진동으로 인해 울리는 노이즈 방지
긴 진동에 따라 주의를 끄는 햅틱을 위해 울리는 노이즈를 방지하려면 패턴을 원활하게 가속하여 증가 효과를 만듭니다. createWaveform(long[] timings, int[] amplitudes, int repeat)
을 사용하면 됩니다.
그림 7. 긴 진동 증가 효과
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(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-07-27(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"]]