이벤트에 햅틱 반응 추가

햅틱의 가장 기본적인 사용 사례 중 하나는 사용자 상호작용에 피드백을 제공하는 것입니다. 시간 선택 도구, 가상 키보드의 키 누름, 텍스트 선택은 햅틱 반응의 일반적인 사용 사례입니다. 햅틱을 적용하는 경우와 방법에 관한 자세한 내용은 햅틱 설계 원칙을 참고하세요.

이 페이지에서는 햅틱 반응을 제공하는 세 가지 방법을 설명합니다.

이러한 메서드는 기기 수준에서 정의된 프리미티브를 사용하여 사용 중인 기기에 적합한 고품질 피드백을 제공합니다.

모든 햅틱 피드백 메서드는 기본적으로 사용자의 터치 피드백 설정을 따릅니다.

View 구성요소를 사용하여 햅틱 반응 생성

View.performHapticFeedback 메서드를 사용하여 햅틱 반응을 생성합니다. HapticFeedbackConstants에 의해 정의된 햅틱 상수는 실행되는 햅틱 효과 유형이 아닌 애플리케이션의 기능에 중점을 둡니다.

기본 구현은 기기와 하드웨어 기능에 따라 다를 수 있지만 앱은 특정 컨텍스트에서 제공할 피드백 유형만 고려해야 합니다. 기능에 집중하면 유사한 상호작용에 햅틱 반응을 사용할 수 있습니다. 사용자는 시간이 지남에 따라 서로 다른 의미를 서로 다른 햅틱 감각에 연결하는 방법을 학습합니다.

기본 요건: 햅틱 반응 사용 설정

View가 표시되는 한, 햅틱 반응을 이벤트에 사용할 수 있습니다. 길게 누르기와 같은 일부 이벤트에는 뷰의 리스너가 이벤트를 처리 (true 반환)하면 트리거되는 기본 햅틱이 있습니다.

Android ViewView.hapticFeedbackEnabled 속성을 false로 설정하여 햅틱 반응을 사용 중지할 수 있습니다. 이 속성을 사용 중지하면 기본 의견이 생성됩니다.

또한 performHapticFeedback 메서드는 사용자가 전체 시스템에서 설정을 사용 중지할 수 있도록 시스템 설정 HAPTIC_FEEDBACK_ENABLED를 준수합니다.

다른 햅틱 API와 달리 HapticFeedbackConstantsView와 함께 사용할 때는 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.areEffectsSupportedVibrator.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를 사용하여 준비한 다음 Vibratorvibrate 메서드 중 하나를 사용하여 재생할 수 있습니다.

이 예에서는 클릭 효과를 재생합니다.

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 사용에 관한 자세한 내용은 맞춤 햅틱 효과 만들기를 참고하세요.