햅틱의 가장 기본적인 사용 사례 중 하나는 사용자 상호작용에 피드백을 제공하는 것입니다. 시간 선택 도구, 가상 키보드의 키 누름, 텍스트 선택은 햅틱 반응의 일반적인 사용 사례입니다. 햅틱을 적용하는 경우와 방법에 관한 자세한 내용은 햅틱 설계 원칙을 참고하세요.
이 페이지에서는 햅틱 반응을 제공하는 세 가지 방법을 설명합니다.
View
(권장)을 사용합니다. 이 접근 방식은 작업 지향적이고 가장 광범위하게 지원되며VIBRATE
권한이 필요하지 않습니다.- 사전 정의된
VibrationEffect
사용 이 접근 방식은 유연성이 더 높지만 일부 장단점이 있습니다. - 프리미티브와 함께 고급 컴포지션 사용 이 방법은 최신이고 훨씬 더 유연하지만 특정 기기 지원이 필요합니다.
이러한 메서드는 기기 수준에서 정의된 프리미티브를 사용하여 사용 중인 기기에 적합한 고품질 피드백을 제공합니다.
모든 햅틱 피드백 메서드는 기본적으로 사용자의 터치 피드백 설정을 따릅니다.
View
구성요소를 사용하여 햅틱 반응 생성
View.performHapticFeedback
메서드를 사용하여 햅틱 반응을 생성합니다. HapticFeedbackConstants
에 의해 정의된 햅틱 상수는 실행되는 햅틱 효과 유형이 아닌 애플리케이션의 기능에 중점을 둡니다.
기본 구현은 기기와 하드웨어 기능에 따라 다를 수 있지만 앱은 특정 컨텍스트에서 제공할 피드백 유형만 고려해야 합니다. 기능에 집중하면 유사한 상호작용에 햅틱 반응을 사용할 수 있습니다. 사용자는 시간이 지남에 따라 서로 다른 의미를 서로 다른 햅틱 감각에 연결하는 방법을 학습합니다.
기본 요건: 햅틱 반응 사용 설정
View
가 표시되는 한, 햅틱 반응을 이벤트에 사용할 수 있습니다.
길게 누르기와 같은 일부 이벤트에는 뷰의 리스너가 이벤트를 처리 (true
반환)하면 트리거되는 기본 햅틱이 있습니다.
Android View
는 View.hapticFeedbackEnabled
속성을 false
로 설정하여 햅틱 반응을 사용 중지할 수 있습니다. 이 속성을 사용 중지하면 기본 의견이 생성됩니다.
또한 performHapticFeedback
메서드는 사용자가 전체 시스템에서 설정을 사용 중지할 수 있도록 시스템 설정 HAPTIC_FEEDBACK_ENABLED
를 준수합니다.
다른 햅틱 API와 달리 HapticFeedbackConstants
를 View
와 함께 사용할 때는 VIBRATE
권한이 필요하지 않습니다.
HapticFeedbackConstant
선택
View
구성요소를 HapticFeedbackConstants
와 함께 사용할 때는 이 상수에 필요한 경우 대체 동작이 있기 때문에 특정 기기 지원을 평가할 필요가 없습니다. 유일한 고려사항은 원하는 상수의 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
를 참고하세요.
기본 요건: Vibrator 및 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 사용에 관한 자세한 내용은 맞춤 햅틱 효과 만들기를 참고하세요.