Константы и примитивы тактильных ощущений определяются HAL вибратора и сопоставляются фреймворком Android с общедоступными API. Чтобы узнать, соответствует ли ваше устройство минимальным требованиям для реализации тактильной обратной связи, выполните следующие проверки:
Рисунок 2. Реализация эффектов
Рисунок 3. Как реализовать примитивы
Как реализовать константы
Разработчики могут использовать константы тактильных ощущений в VibrationEffect с помощью VibrationEffect.createPredefined(). Ниже приведены статусы реализации констант.
| Константы тактильной обратной связи | Местоположения и сводки |
|---|---|
EFFECT_TICK, EFFECT_CLICK,
EFFECT_HEAVY_CLICK,
EFFECT_DOUBLE_CLICK |
VibrationEffect
classКонстанты тактильной отдачи в 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.Примитивы Chirp. Примитивы с переменной амплитудой и частотой, обычно более длительные, чем короткие примитивы. Это
SLOW_RISE,QUICK_RISE,QUCK_FALL,THUDиSPIN.
Примитивы типа short
Короткие примитивы можно описать с помощью профиля ускорения выходного сигнала вибропривода. Абсолютная частота, используемая для каждого примитива, зависит от резонансной частоты привода. Подробнее о настройке оборудования и инструментах для измерения выходных данных рассказывается в статье Настройка тестового оборудования.
Важным показателем качества коротких вибраций является отношение импульса к звонку (PRR), показанное на рисунке 5. PRR – это отношение между основным импульсом, определяемым сигналом в окне длительности, где амплитуда уменьшается до 10% от пиковой амплитуды, и импульсом звонка, определяемым сигналом, где амплитуда уменьшается с 10% до менее чем 1% от пиковой амплитуды. Формула для расчета PRR:
Подробнее о PRR можно узнать в статье Анализ формы волны, а о том, как анализировать и сравнивать результаты, – в статье Сравнение результатов с помощью карты эффективности.
Рисунок 5. Определение соотношения пульса к звонку
Используйте короткие примитивы в качестве обратной связи с пользователем или в более длинных композициях, чтобы создавать мягкие текстуры. Это означает, что они часто срабатывают и воспроизводятся друг за другом. Воспринимаемая интенсивность одного короткого примитива может усиливать интенсивность более крупного эффекта. Поэтому калибруйте примитив с одним или небольшим количеством тиков с помощью более крупной композиции, например 100 последовательных тиков.
Примитив клика
Примитив щелчка – это сильный, четкий эффект, который обычно работает близко к резонансной частоте устройства, чтобы достичь максимальной мощности за короткое время. Он сильнее и глубже других примитивов и работает на максимальной интенсивности.
Если доступно, используйте форсирование двигателя в начале и активное торможение в конце, чтобы сократить время нарастания и спада крутящего момента. Для некоторых двигателей использование прямоугольной волны вместо синусоидальной может обеспечить более быстрое ускорение. На рисунке 6 показан пример профиля ускорения для примитива "клик":
Рисунок 6. Пример профиля ускорения вывода для примитива клика
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 12 мс Ограничение: < 30 мс |
| Пиковое ускорение на выходе |
Цель: 2 G Ограничение: > 1 ГБ |
| Частота | Приблизительно на резонансной частоте |
Примитив "Галочка" (легкая галочка)
Примитив "щелчок" – это резкий и короткий эффект, обычно работающий в более высоком диапазоне частот. Этот примитив также можно описать как клик средней интенсивности с более высокой частотой и коротким хвостом. Те же рекомендации применимы для достижения короткого времени нарастания с помощью форсирования двигателя или прямоугольной волны для начального запуска и активного торможения при смещении. На рисунке 7 показан пример профиля ускорения для примитива tick:
Рисунок 7. Пример профиля ускорения для примитива "галочка"
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 5 мс Ограничение: < 20 мс |
| Максимальное ускорение на выходе |
Цель: половина от Ограничение: от 0,5 до 1 G. |
| Частота |
Цель: 2x резонансная частота Ограничение: < 500 Гц |
Примитив с низкой частотой обновления
Низкий щелчок – это более мягкая и слабая версия легкого щелчка, работающая в более низком диапазоне частот, чтобы придать эффекту больше объема. Этот примитив также можно описать как клик средней интенсивности с низкой частотой, предназначенный для многократного использования в целях динамической обратной связи. Те же рекомендации применимы для достижения короткого времени нарастания с помощью перегрузки двигателя или прямоугольной волны для начального запуска. На рисунке 8 показан пример выходного профиля ускорения для примитива с низким тиком:
Рисунок 8. Пример профиля ускорения вывода для примитива с низкой частотой
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 12 мс Ограничение: < 30 мс |
| Максимальное ускорение на выходе |
Цель: 1/4 от Ограничение: от 0,2 до 0,5 G. |
| Частота |
Цель: 2/3 резонансной частоты Ограничение: < 100 Гц. |
Примитивы Chirp
Примитивы Chirp можно описать входными сигналами для уровня напряжения и частоты вибрации. Ускорение, которое мотор может выдавать в разных диапазонах частот, зависит от кривой отклика привода. Диапазоны частот и уровни напряжения необходимо настраивать для каждого устройства отдельно.
Примитивное значение медленного роста
Медленный подъем – это медленное увеличение амплитуды и частоты с мягким началом и постоянно увеличивающейся интенсивностью вибрации. Его можно реализовать, последовательно изменяя амплитуду и частоту, используя более низкий диапазон частот, который работает вне резонанса. На рисунке 9 показаны входные параметры и пример выходного профиля ускорения для этой реализации. Красная линия соответствует значениям амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.)
Рисунок 9. Входные параметры и пример профиля ускорения для примитива с медленным нарастанием
Если частотная характеристика двигателя ограничена (недостаточно сильная вне резонансной частоты), то альтернативным вариантом является синусоидальная развертка от 1/2x до 1x резонансной частоты. Резонанс двигателя способствует достижению пика сигнала в конце.
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 500 мс. Допуск: 20 мс |
| Пиковое ускорение на выходе |
Целевое значение: 0,5 G Ограничение: от 0,5 до 1 ГБ. |
| Частота |
Целевое значение: от 1/2 до 2/3 резонансной частоты Альтернатива: 1/2 резонансной частоты |
Примитивное значение быстрого роста
Быстрый подъем – это более быстрое увеличение амплитуды и частоты с мягким началом и постоянным ростом интенсивности вибрации. Целевые значения ускорения и частоты вибрации должны быть такими же, как у примитива "медленный подъем", но достигаться за более короткое время. На рисунке 10 показаны входные параметры вибрации и пример выходного профиля ускорения для примитива медленного подъема. Красная линия соответствует значениям амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.
Рисунок 10. Входные параметры и пример профиля ускорения для примитива быстрого подъема
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 150 мс Допуск: 20 мс |
| Максимальное ускорение на выходе |
Цель: как на устройстве " Ограничение: то же, что и у |
| Частота |
Цель: как на устройстве " Альтернативный вариант: как на устройстве " |
Примитивное значение быстрого падения
Быстрое падение – это быстрое снижение амплитуды и частоты с мягким началом. Вы можете использовать более высокую частоту в качестве отправной точки, пока двигатель разгоняется до максимального выходного ускорения. Частота должна постоянно уменьшаться на протяжении всего свипа, даже во время нарастания. На рисунке 11 показаны входные параметры и пример выходного профиля ускорения для этой реализации. Красная линия соответствует значениям амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.
Рисунок 11. Входные параметры и пример выходного профиля ускорения для примитива быстрого падения
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 100 мс. Допуск: 20 мс |
| Максимальное ускорение на выходе |
Цель: 1 ГБ Ограничение: от 0,5 до 2 ГБ. |
| Частота |
Целевой диапазон: от 1 до 2 раз больше резонансной частоты. |
Примитив "Глухой удар"
Глухой стук – это низкий ударный эффект, который имитирует физическое ощущение стука по полой древесине. Этот примитив работает в низкочастотном диапазоне, как и примитив Low Tick, и позволяет сделать эффект более ощутимым. Вы можете реализовать примитив "глухой удар" как нисходящую развертку амплитуды и частоты в более низком диапазоне частот (желательно менее 100 Гц). На рисунке 12 показаны входные параметры и пример выходного профиля ускорения для этой реализации. Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.
Рисунок 12. Входные параметры и пример выходного профиля ускорения для примитива "глухой удар"
Если частотная характеристика двигателя ограничена, можно использовать другой подход: начать с сигнала полной интенсивности на резонансной частоте и постепенно снижать частоту до минимально возможной, при которой вибрация ещё ощущается. При таком подходе может потребоваться увеличить интенсивность сигнала привода на более низкой частоте, чтобы вибрация ощущалась.
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 300 мс Допустимое отклонение: 20 мс. |
| Максимальное ускорение на выходе |
Цель: 0,25 G Ограничение: от 0,2 G до 0,5 G. |
| Частота |
Целевое значение: от 1/2 до 1/3 резонансной частоты Альтернативный вариант: от 1x до 1/2 резонансной частоты |
Примитив вращения
Вращение имитирует быстрое вращение вверх и вниз с небольшим акцентом в центре. Вращение можно реализовать, независимо изменяя амплитуду и частоту в противоположных направлениях, а затем в обратном порядке. Важно использовать более низкий диапазон частот (желательно менее 100 Гц). На рисунке 13 показаны входные параметры и пример выходного профиля ускорения для этой реализации. Красная линия соответствует значениям амплитуды слева и показывает, как амплитуда вибрации меняется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации меняется со временем.
Мы рекомендуем вызывать примитив вращения дважды подряд или трижды в композициях, чтобы создать ощущение вращения и неустойчивости.
Если частотная характеристика мотора ограничена, можно выполнить быстрое синусоидальное сканирование от 1/2x до 1x резонансной частоты и обратно. Резонанс автоматически добавляет акцент в середине сигнала.
Рисунок 13. Входные параметры и пример выходного профиля ускорения для примитива вращения
| Параметр | Рекомендация |
|---|---|
| Продолжительность |
Целевое значение: 150 мс Допуск: 20 мс |
| Пиковое ускорение на выходе |
Целевое значение: 0,5 G Ограничение: от 0,25 G до 0,75 G. |
| Частота |
Цель: 2/3, затем 1/3, затем снова 1/2 резонансной частоты Альтернативный вариант: от 2/3 до 1x, затем обратно до 1/2 резонансной частоты |