햅틱의 가장 기본적인 사용 사례 중 하나는 사용자 상호작용에 관한 의견을 제공하는 것입니다. 시간 선택 도구, 가상 키보드의 키 누르기, 텍스트 선택은 햅틱 반응을 효과적으로 사용하는 일반적인 사용 사례입니다. 햅틱을 적용하는 시기와 방법에 관한 자세한 내용은 햅틱 디자인 원칙을 참고하세요.
이 페이지에서는 햅틱 반응을 제공하는 세 가지 방법을 설명합니다.
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 } }
자바
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) } }
자바
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)
자바
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))
자바
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
원시 요소와 함께 고급 컴포지션 사용
VibrationEffect.Composition
API는 햅틱 반응을 위한 추가 가능성을 제공합니다. 그러나 이러한 원시 요소는 효과와 달리 시스템 수준 대체가 없으므로 기기에서 지원하는 원시 요소와 기타 기능에 세심한 주의가 필요합니다.
이러한 API 사용에 관한 자세한 내용은 커스텀 햅틱 효과 만들기를 참고하세요.