햅틱 상수와 프리미티브는 진동기 HAL에 의해 정의되고 Android 프레임워크에 의해 공개 API에 매핑됩니다. 다음 검사를 진행하여 기기가 햅틱 구현을 위한 최소 요구사항을 충족하는지 확인합니다.
그림 2. 효과 구현
그림 3. 프리미티브 구현
상수 구현
VibrationEffect의 햅틱 상수는 개발자가 VibrationEffect.createPredefined()을 통해 사용할 수 있습니다. 다음 햅틱 상수의 구현 상태를 확인합니다.
햅틱 상수 | 위치 및 요약 |
---|---|
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK |
VibrationEffect 클래스VibrationEffect 의 햅틱 상수에는 입력 이벤트 개념이 포함되지 않으며 UI 요소가 없습니다. 상수는 대신 EFFECT_CLICK 및 EFFECT_HEAVY_CLICK 과 같은 에너지 수준의 개념을 포함하며,
createPredefined() 에 의해 호출됩니다. |
다음에 설명된 대체 진동은 VibrationEffect
상수를 구현하지 않는 기기에서 실행됩니다. 이러한 기기에서 최상의 성능을 발휘하도록 이러한 구성을 업데이트하는 것이 좋습니다.
EFFECT_CLICK
VibrationEffect.createWaveform
으로 생성된 파형 진동 및frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
에 설정된 타이밍EFFECT_HEAVY_CLICK
VibrationEffect.createWaveform
으로 생성된 파형 진동 및frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern
에 설정된 타이밍EFFECT_DOUBLE_CLICK
VibrationEffect.createWaveform
으로 생성된 파형 진동 및 타이밍 (0, 30, 100, 30).EFFECT_TICK
VibrationEffect.createWaveform
으로 생성된 파형 진동 및frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
에 설정된 타이밍
그림 4. 피드백 상수 구현
HapticFeedbackConstants의 햅틱 상수는 개발자가 View.performHapticFeedback()을 통해 사용할 수 있습니다. 다음 공개 피드백 상수의 상태를 확인합니다.
햅틱 상수 | 위치 및 요약 |
---|---|
CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS ,
KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS ,
TEXT_HANDLE_MOVE , VIRTUAL_KEY ,
VIRTUAL_KEY_RELEASE , CONFIRM , REJECT ,
GESTURE_START , GESTURE_END |
HapticFeedbackConstants 클래스 HapticFeedbackConstants 의 햅틱 상수는 KEYBOARD_PRESS 및 KEYBOARD_RELEASE 와 같은 특정 UI 요소로 입력 이벤트를 지원하며, performHapticFeedback() 에 의해 호출됩니다. |
프리미티브 구현
VibrationEffect.Composition
의 햅틱 원시에는 개발자가 addPrimitive(int primitiveId, float scale, int delay)
를 통해 사용할 수 있는 확장 가능한 강도가 있습니다.
프리미티브는 두 가지 카테고리로 나눌 수 있습니다.
짧은 프리미티브: 일반적으로 20밀리초 미만의 짧은 기간의 프리미티브입니다.
CLICK
,TICK
,LOW_TICK
가 여기에 해당합니다.치프 프리미티브: 진폭과 주파수가 다양한 프리미티브로, 일반적으로 짧은 프리미티브보다 지속 시간이 깁니다.
SLOW_RISE
,QUICK_RISE
,QUCK_FALL
,THUD
,SPIN
입니다.
짧은 프리미티브
짧은 프리미티브는 진동 모터 출력 가속도 프로필로 설명할 수 있습니다. 사용되는 절대 주파수는 액추에이터의 공진 주파수에 따라 각 프리미티브마다 다릅니다. 하드웨어 설정 및 출력 측정 도구에 관한 자세한 내용은 테스트 장비 설정을 참고하세요.
짧은 진동에 유용한 품질 측정항목은 펄스 대 링 비율(PRR)입니다(그림 5 참고). PRR은 진폭이 최대 진폭의 10% 로 감소하는 시간 창 내부의 신호로 정의되는 기본 펄스와 진폭이 최대 진폭의 10% 에서 최대 진폭의 1% 미만으로 감소하는 신호로 정의되는 링 펄스의 비율로 정의됩니다. PRR의 공식은 다음과 같습니다.
PRR에 관한 자세한 내용은 파형 분석을 참고하고 결과 분석 및 비교에 관한 자세한 내용은 성능 지도 사용 시 결과 비교를 참고하세요.
그림 5. 맥박 대 울림 비율 정의
짧은 원시 도형을 사용자 입력 의견으로 적용하거나 더 긴 음악 작품에서 재생하여 부드러운 질감을 만듭니다. 즉, 일반적으로 자주 트리거되고 빠르게 연속 재생됩니다. 단일 짧은 원시 도형의 인식된 강도는 더 큰 효과 강도를 복합할 수 있습니다. 따라서 단일 틱 또는 낮은 틱 원시를 더 큰 컴포지션(예: 연속 100개 틱)으로 보정합니다.
원시 항목 클릭
클릭 원시 요소는 일반적으로 기기의 공진 주파수에 가까워서 작동하여 짧은 시간에 최대 출력에 도달하는 강하고 선명한 효과입니다. 다른 원시형보다 강력하고 깊으며 최대 강도로 실행됩니다.
가능한 경우 시작 시 모터 오버드라이브를 사용하고 끝 시 능동 제동을 사용하여 모터 상승 및 하강 시간을 짧게 만듭니다. 일부 모터의 경우 사인파 대신 정사각형 파를 사용하면 가속 속도를 높일 수 있습니다. 그림 6은 클릭 기본 요소의 출력 가속 프로필 예를 보여줍니다.
그림 6. 클릭 원시 항목의 출력 가속 프로필 예
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 12밀리초 한도: 30밀리초 미만 |
최대 출력 가속 |
타겟: 2G 한도: 1G 초과 |
실행 빈도 | 공진 주파수 근처 |
체크표시 프리미티브 (밝은 체크표시)
틱 원시 요소는 일반적으로 더 높은 주파수 범위에서 작동하는 날카롭고 짧은 효과입니다. 이 원시 요소는 짧은 테일과 함께 더 높은 빈도로 발생하는 중간 강도의 클릭으로 설명할 수도 있습니다. 모터 오버드라이브 또는 직사각형 파동을 사용하여 초기 시작에 짧은 상승 시간을 달성하고 오프셋에서 능동 제동을 적용하는 경우에도 동일한 안내가 적용됩니다. 그림 7은 틱 원시 항목의 출력 가속도 프로필 예를 보여줍니다.
그림 7. 틱 원시 항목의 출력 가속 프로필 예
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 5밀리초 제한: 20밀리초 미만 |
최대 출력 가속 |
타겟: 한도: 0.5~1GB |
실행 빈도 |
타겟: 공진 주파수의 2배 제한: 500Hz 미만 |
낮은 틱 기본 유형
낮은 틱 원시 요소는 밝은 틱의 더 부드럽고 약한 버전으로, 더 낮은 주파수 범위에서 작동하여 효과에 더 많은 깊이를 제공합니다. 이 원시 요소는 동적 피드백에 반복적으로 사용하기 위한 중간 강도의 낮은 빈도의 클릭으로 설명할 수도 있습니다. 모터 오버드라이브 또는 직사각형 파동을 사용하여 초기 시작에 짧은 상승 시간을 달성하는 경우에도 동일한 안내가 적용됩니다. 그림 8은 낮은 틱 원시 항목의 출력 가속도 프로필 예를 보여줍니다.
그림 8. 낮은 틱 원시 항목의 출력 가속 프로필 예
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 12밀리초 한도: 30밀리초 미만 |
최대 출력 가속 |
타겟: 한도: 0.2~0.5G |
실행 빈도 |
타겟: 공진 주파수의 2/3 한도: 100Hz 미만 |
Chirp 프리미티브
치프 프리미티브는 전압 수준 및 진동 주파수의 입력 신호로 설명할 수 있습니다. 모터가 다양한 주파수 범위에서 출력할 수 있는 가속도는 액추에이터의 주파수 응답 곡선에 따라 다릅니다. 주파수 범위와 전압 수준은 기기별로 조정해야 합니다.
느린 상승 프리미티브
느린 상승은 부드러운 시작과 함께 진폭 및 주파수가 천천히 위로 스윕되고 스윕 전반에서 진동 강도가 지속적으로 증가하는 것입니다. 공진 외부에서 작동하는 더 낮은 주파수 범위를 사용하여 진폭과 주파수를 모두 일관되게 스윕하여 구현할 수 있습니다. 그림 9는 이 구현의 입력 매개변수와 출력 가속도 프로필 예시를 보여줍니다. 빨간색 선은 왼쪽의 진폭 라벨과 일치하며 진동 진폭이 시간에 따라 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 주파수 라벨과 일치하며 진동 주파수가 시간에 따라 어떻게 달라지는지 나타냅니다.)
그림 9. 느린 상승 원시 항목의 입력 매개변수 및 출력 가속도 프로필 예
모터의 주파수 응답이 제한되어 있는 경우 (공진 주파수에서 충분히 강하지 않음) 공진 주파수의 1/2배에서 1배까지의 사인 스윕을 대신 구현할 수 있습니다. 모터 공진은 끝에서 신호 피크에 도달하는 데 기여합니다.
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 500밀리초 허용 오차: 20ms |
최대 출력 가속 |
타겟: 0.5G 한도: 0.5~1GB |
실행 빈도 |
타겟: 공진 주파수의 1/2~2/3 대안: 공진 주파수의 1/2 |
빠른 상승 프리미티브
빠른 상승은 진폭과 주파수가 더 빠르게 위로 스윕되며 시작이 부드럽고 스윕 전체에서 진동 강도가 지속적으로 증가합니다. 출력 가속도 및 진동 주파수 타겟은 더 짧은 시간에 달성되는 느린 상승 원시 값과 동일해야 합니다. 그림 10은 진동 입력 매개변수와 느린 상승 원시 항목의 출력 가속도 프로필 예를 보여줍니다. 빨간색 선은 왼쪽의 진폭 라벨과 일치하며 진동 진폭이 시간에 따라 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 주파수 라벨과 일치하며 진동 주파수가 시간에 따라 어떻게 달라지는지 나타냅니다.)
그림 10. 빠른 상승 원시 항목의 입력 매개변수 및 출력 가속도 프로필 예
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 150밀리초 허용 오차: 20ms |
최대 출력 가속 |
타겟: 한도: |
실행 빈도 |
타겟: 대안: |
빠른 하락 프리미티브
빠른 하락은 부드러운 시작과 함께 빠른 진폭 및 주파수 하향 스윕입니다. 모터가 최대 출력 가속도에 도달하기 위해 상승하는 동안 더 높은 주파수를 시작점으로 사용할 수 있습니다. 주파수는 상승 시간 중에도 스윕 전체에서 일관되게 감소해야 합니다. 그림 11은 이 구현의 입력 매개변수와 출력 가속도 프로필 예시를 보여줍니다. 빨간색 선은 왼쪽의 진폭 라벨과 일치하며 진동 진폭이 시간에 따라 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 주파수 라벨과 일치하며 진동 주파수가 시간에 따라 어떻게 달라지는지 나타냅니다.)
그림 11. 빠른 하강 원시 항목의 입력 매개변수 및 출력 가속도 프로필의 예
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 100밀리초 허용 오차: 20ms |
최대 출력 가속 |
타겟: 1G 한도: 0.5~2GB |
실행 빈도 |
타겟: 공진 주파수의 2배~1배 |
쿵 프리미티브
둔탁한 소리는 속이 빈 나무를 두드릴 때의 물리적 느낌을 시뮬레이션하는 둔탁하고 낮은 타격 효과입니다. 이 원시 요소는 저주파 범위에서 작동하여(저주파 원시 요소와 유사) 효과에 더 많은 볼륨을 제공합니다. 둔탁한 소리 프리미티브는 낮은 주파수 범위 (가급적 100Hz 미만)에서 진폭 및 주파수 하향 스윕으로 구현할 수 있습니다. 그림 12는 이 구현의 입력 매개변수와 출력 가속도 프로필 예시를 보여줍니다. 빨간색 선은 왼쪽의 진폭 라벨과 일치하며 시간에 따른 진동 진폭의 변화를 나타냅니다. 파란색 선은 오른쪽의 주파수 라벨과 일치하며 진동 주파수가 시간에 따라 어떻게 달라지는지 나타냅니다.)
그림 12. 쿵 원시 항목의 입력 매개변수 및 출력 가속도 프로필의 예
모터의 주파수 응답이 제한된 경우 대안 구현은 공진 주파수에서 전체 강도 구동 신호로 시작하고 여전히 인식할 수 있는 최저 주파수로 떨어뜨리는 것입니다. 이 접근 방식을 사용하려면 진동을 느낄 수 있도록 더 낮은 주파수에서 구동 신호 강도를 높여야 할 수 있습니다.
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 300밀리초 허용 오차: 20ms |
최대 출력 가속 |
타겟: 0.25G 한도: 0.2~0.5G |
실행 빈도 |
타겟: 공진 주파수의 1/2~1/3 대체: 공진 주파수의 1~1/2 |
회전 프리미티브
회전은 중앙에 약간의 강조 표시를 사용하여 빠른 위아래 회전의 회전 모멘텀을 시뮬레이션합니다. 회전은 진폭과 주파수를 독립적으로 반대 방향으로 스윕한 다음 역방향 모션을 실행하여 구현할 수 있습니다. 낮은 주파수 범위 (100Hz 미만 권장)를 사용하는 것이 중요합니다. 그림 13은 이 구현의 입력 매개변수와 출력 가속도 프로필 예시를 보여줍니다. 빨간색 선은 왼쪽의 진폭 라벨과 일치하며 진동 진폭이 시간에 따라 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 주파수 라벨과 일치하며 진동 주파수가 시간에 따라 어떻게 달라지는지 나타냅니다.)
회전 느낌을 내기 위해 회전 프리미티브를 연속으로 두 번 호출하거나 컴포지션에서 세 번 호출하는 것이 좋습니다.
모터의 주파수 응답이 제한된 경우 공진 주파수의 1/2배에서 1배까지 왕복하는 빠른 사인 스윕을 실행하는 대체 구현을 사용할 수 있습니다. 모터 공진은 자동으로 신호에 중간에 악센트를 줍니다.
그림 13. 회전 원시 항목의 입력 매개변수 및 출력 가속도 프로필의 예
매개변수 | 가이드라인 |
---|---|
시간 |
타겟: 150밀리초 허용 오차: 20ms |
최대 출력 가속 |
타겟: 0.5G 한도: 0.25~0.75g |
실행 빈도 |
타겟: 공진 주파수의 2/3~1/3, 다시 1/2 대체 방법: 2/3~1x, 그런 다음 공진 주파수의 1/2로 다시 |