Константы и примитивы тактильной обратной связи определяются HAL вибратора и сопоставляются фреймворком Android с общедоступными API. Выполните следующие проверки, чтобы определить, соответствует ли ваше устройство минимальным требованиям для реализации тактильной обратной связи:

Рисунок 2. Эффекты от внедрения.

Рисунок 3. Реализация примитивов
Реализуйте константы
Разработчики могут использовать тактильные константы в VibrationEffect с помощью метода VibrationEffect.createPredefined() . Проверьте статус реализации следующих тактильных констант.
| Тактильные константы | Места расположения и краткие описания |
|---|---|
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK | Класс VibrationEffectВ классе VibrationEffect константы тактильной обратной связи не содержат понятия входных событий и не имеют элементов пользовательского интерфейса. Вместо этого константы включают понятие уровней энергии, например, 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 , которые вызываются функцией 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 мс |
| Максимальное ускорение на выходе | Цель: 2 Г Ограничение: > 1 Г |
| Частота | Примерно на резонансной частоте |
Примитивный клещ (светлый клещ)
Примитив «тиканье» — это резкий, короткий эффект, обычно работающий в более высоком частотном диапазоне. Этот примитив также можно описать как щелчок средней интенсивности на более высокой частоте с коротким хвостом. Те же рекомендации применимы для достижения короткого времени нарастания с использованием режима перегрузки двигателя или прямоугольной волны для начального включения, а также активного торможения в момент смещения. На рисунке 7 показан пример профиля ускорения выходного сигнала для примитива «тиканье»:

Рисунок 7. Пример профиля ускорения выходных данных для примитива "тик".
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 5 мс Ограничение: < 20 мс |
| Максимальное ускорение на выходе | Цель: половина Предел: от 0,5 Г до 1 Г |
| Частота | Цель: в 2 раза больше резонансной частоты Ограничение: < 500 Гц |
Низкий тик примитива
Примитив «низкий тик» — это более мягкая, слабая версия лёгкого тика, работающая в более низком диапазоне частот для придания эффекту большей насыщенности. Этот примитив также можно описать как щелчок средней интенсивности на более низкой частоте, предназначенный для многократного использования в целях динамической обратной связи. Те же рекомендации применимы для достижения короткого времени нарастания при использовании режима перегрузки двигателя или прямоугольной волны для начального воздействия. На рисунке 8 показан пример профиля ускорения выходного сигнала для примитива «низкий тик»:

Рисунок 8. Пример профиля ускорения выходных данных для примитива с низким уровнем такта.
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 12 мс Ограничение: < 30 мс |
| Максимальное ускорение на выходе | Цель: 1/4 Предел: от 0,2 Г до 0,5 Г |
| Частота | Цель: 2/3 резонансной частоты Ограничение: < 100 Гц |
Примитивы чириканья
Примитивы «чирп-сигнала» можно описать входными сигналами уровня напряжения и частоты вибрации. Ускорение, которое двигатель способен развивать в различных диапазонах частот, изменяется в зависимости от частотной характеристики привода. Диапазоны частот и уровни напряжения необходимо настраивать для каждого устройства отдельно.
Медленный подъем примитива
Плавный подъем представляет собой медленное увеличение амплитуды и частоты с мягким началом и равномерным нарастанием интенсивности вибрации на протяжении всего диапазона. Его можно реализовать путем равномерного изменения как амплитуды, так и частоты, используя более низкий частотный диапазон, работающий вне резонанса. На рисунке 9 показаны входные параметры и пример профиля ускорения на выходе для этой реализации. (Красная линия соответствует обозначениям амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует обозначениям частоты справа и показывает, как частота вибрации изменяется со временем.)

Рисунок 9. Входные параметры и пример профиля ускорения на выходе для примитива медленного подъема.
Если частотная характеристика двигателя ограничена (недостаточно сильна вне резонансной частоты), то альтернативным вариантом является синусоидальная развертка от 1/2 до 1x резонансной частоты. Резонанс двигателя способствует достижению пика сигнала в конце.
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 500 мс Допустимое отклонение: 20 мс |
| Максимальное ускорение на выходе | Целевое значение: 0,5 г Предел: от 0,5 Г до 1 Г |
| Частота | Целевой диапазон: от 1/2 до 2/3 резонансной частоты. Альтернативный вариант: 1/2 от резонансной частоты |
Быстрый подъем примитив
Быстрый нарастание представляет собой более быстрое увеличение амплитуды и частоты колебаний с плавным началом и равномерным нарастанием интенсивности вибрации на протяжении всего процесса. Целевые значения ускорения на выходе и частоты вибрации должны быть такими же, как и для медленного нарастания, но достигаться за более короткий промежуток времени. На рисунке 10 показаны параметры входного сигнала вибрации и пример профиля ускорения на выходе для медленного нарастания. (Красная линия соответствует обозначениям амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует обозначениям частоты справа и показывает, как частота вибрации изменяется со временем.)

Рисунок 10. Входные параметры и пример профиля ускорения на выходе для примитива быстрого подъема.
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 150 мс Допустимое отклонение: 20 мс |
| Максимальное ускорение на выходе | Цель: та же, что и Ограничение: то же, что и |
| Частота | Цель: та же, что и Альтернативный вариант: То же, что и |
Быстрое падение примитива
Быстрое падение представляет собой быстрое снижение амплитуды и частоты с плавным началом. В качестве начальной точки можно использовать более высокую частоту, пока двигатель набирает обороты для достижения пикового ускорения на выходе. Частота должна постоянно уменьшаться на протяжении всего процесса, даже во время нарастания. На рисунке 11 показаны входные параметры и пример профиля ускорения на выходе для данной реализации. (Красная линия соответствует обозначениям амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует обозначениям частоты справа и показывает, как частота вибрации изменяется со временем.)

Рисунок 11. Входные параметры и пример профиля ускорения на выходе для примитива быстрого падения.
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 100 мс Допустимое отклонение: 20 мс |
| Максимальное ускорение на выходе | Цель: 1 Г Ограничение: от 0,5 Г до 2 Г |
| Частота | Цель: увеличение частоты в 2–1 раз по сравнению с резонансной частотой. |
Примитивный глухой удар
«Глухой удар» — это низкий, перкуссионный эффект, имитирующий физическое ощущение стука по полому дереву. Этот примитив работает в низкочастотном диапазоне, аналогично примитиву «низкий щелчок», чтобы придать эффекту большую плотность. Примитив «Глухой удар» можно реализовать как нисходящую развертку амплитуды и частоты в более низком частотном диапазоне (предпочтительно менее 100 Гц). На рисунке 12 показаны входные параметры и пример профиля ускорения на выходе для этой реализации. (Красная линия соответствует обозначениям амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует обозначениям частоты справа и показывает, как частота вибрации изменяется со временем.)

Рисунок 12. Входные параметры и пример профиля ускорения на выходе для примитива «глухой удар».
Если частотная характеристика двигателя ограничена, то альтернативным вариантом является начало работы с управляющим сигналом полной интенсивности на резонансной частоте и последующее снижение до самой низкой частоты, которую еще можно ощутить. Для того чтобы вибрация ощущалась, может потребоваться увеличение интенсивности управляющего сигнала на более низкой частоте.
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 300 мс Допустимое отклонение: 20 мс |
| Максимальное ускорение на выходе | Целевое значение: 0,25 г Предел: от 0,2 Г до 0,5 Г |
| Частота | Целевой уровень: от 1/2 до 1/3 резонансной частоты. Альтернативный вариант: от 1x до 1/2 резонансной частоты |
Примитив вращения
Вращение имитирует вращательный момент быстрого вращения вверх и вниз с небольшим акцентом в центре. Вращение можно реализовать, независимо изменяя амплитуду и частоту в противоположных направлениях, после чего следует обратное движение. Важно использовать более низкий частотный диапазон (предпочтительно менее 100 Гц). На рисунке 13 показаны входные параметры и пример профиля ускорения на выходе для этой реализации. (Красная линия соответствует обозначениям амплитуды слева и показывает, как амплитуда колебаний изменяется со временем. Синяя линия соответствует обозначениям частоты справа и показывает, как частота колебаний изменяется со временем.)
Мы рекомендовали вызывать элемент вращения дважды подряд или трижды в композициях, чтобы добиться ощущения вращения и неустойчивости.
Если частотная характеристика двигателя ограничена, альтернативным вариантом является быстрое синусоидальное сканирование от 1/2x до 1x резонансной частоты и обратно. Резонанс двигателя автоматически придает сигналу акцент в середине.

Рисунок 13. Входные параметры и пример профиля ускорения на выходе для спинового примитива.
| Параметр | Руководство |
|---|---|
| Продолжительность | Целевое время: 150 мс Допустимое отклонение: 20 мс |
| Максимальное ускорение на выходе | Целевое значение: 0,5 г Предел: от 0,25 Г до 0,75 Г |
| Частота | Цель: от 2/3 до 1/3, затем обратно к 1/2 резонансной частоты. Альтернативный вариант: от 2/3 до 1x, затем обратно к 1/2 резонансной частоты. |