이벤트에 햅틱 반응 추가

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

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

이러한 메서드는 기기 수준에서 정의된 기본 요소를 사용하여 현재 사용 중인 기기에 맞게 조정된 고품질 피드백을 제공합니다.

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

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을 참고하세요.

사전 요구사항: Vibrator 및 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.Builder를 사용하여 컴포지션 만들기

Android 16 (26Q4)부터 VibrationEffect.Builder API는 타임라인을 따라 개별 미리 설정, 엔벨로프, 기타 진동 요소를 시퀀싱하여 맞춤 햅틱 반응을 만드는 가장 유연하고 표현력이 뛰어난 방법을 제공합니다. 또한 VibrationEffect.Builder로 만든 컴포지션에는 지원되는 요소 전반에 걸쳐 자동 대체 지원이 내장되어 있습니다.

VibrationEffect.Builder (및 VibrationEffect.Composition API)로 햅틱 효과를 구성하는 방법은 맞춤 햅틱 효과 만들기에서 자세히 설명합니다.