Реализация констант и примитивов

Константы и примитивы тактильных ощущений определяются 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 .

  • Примитивы Chirp: Примитивы с переменной амплитудой и частотой, обычно с большей длительностью, чем короткие примитивы. Это SLOW_RISE , QUICK_RISE , QUCK_FALL , THUD и SPIN .

Короткие примитивы

Короткие примитивы можно описать профилем ускорения выходного сигнала вибрационного двигателя. Абсолютная частота, используемая для каждого примитива, варьируется в зависимости от резонансной частоты привода. См. Настройка испытательного оборудования для получения дополнительной информации о настройке оборудования и инструментах для измерения выходного сигнала.

Ценной метрикой качества для коротких вибраций является отношение импульса к кольцу (PRR), показанное на рисунке 5. PRR определяется как отношение между основным импульсом , определяемым сигналом внутри окна длительности, где амплитуда уменьшается до 10% от пиковой амплитуды, и кольцевым импульсом , определяемым сигналом, где амплитуда уменьшается с 10% пиковой амплитуды до менее 1% от пиковой амплитуды. Формула для PRR:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Для получения дополнительной информации о PRR см. раздел Анализ формы волны , а для получения дополнительной информации об анализе и сравнении результатов см. раздел Сравнение результатов с использованием карты производительности .

Соотношение импульса и звонка

Рисунок 5. Определение соотношения импульса и звонка

Применяйте короткие примитивы в качестве обратной связи пользовательского ввода или воспроизводите их в более длинных композициях для создания мягких текстур. Это означает, что они обычно запускаются часто и воспроизводятся в быстрой последовательности. Воспринимаемая интенсивность одного короткого примитива может составить большую интенсивность эффекта. По этой причине калибруйте один тик или примитив с низким тиком с более крупной композицией, например, 100 последовательными тиками.

Кликните примитив

Примитив щелчка — это сильный, четкий эффект, обычно работающий близко к резонансной частоте устройства, чтобы достичь максимального выхода за короткий промежуток времени. Он сильнее и глубже других примитивов, работает с максимальной интенсивностью.

Если возможно, используйте ускорение двигателя в начале и активное торможение в конце, чтобы добиться короткого времени подъема и спада двигателя. Для некоторых двигателей использование прямоугольной волны вместо синусоиды может обеспечить более быстрое ускорение. На рисунке 6 показан пример выходного профиля ускорения для примитива щелчка:

Нажмите примитивный профиль ускорения вывода

Рисунок 6. Пример выходного профиля ускорения для примитива щелчка

Параметр Руководство
Продолжительность

Цель: 12 мс

Предел: < 30 мс

Пиковое выходное ускорение

Цель: 2 G

Предел: > 1 G

Частота Примерно на резонансной частоте

Примитивный тик (светлый тик)

Примитив тика — это резкий, короткий эффект, обычно работающий в диапазоне более высоких частот. Этот примитив также можно описать как щелчок средней интенсивности на более высокой частоте с коротким хвостом. Те же указания применимы для достижения короткого времени нарастания с использованием перегрузки двигателя или прямоугольной волны для начального начала и активного торможения при смещении. На рисунке 7 показан пример профиля выходного ускорения для примитива тика:

Профиль ускорения вывода примитива Tick

Рисунок 7. Пример выходного профиля ускорения для примитива тика

Параметр Руководство
Продолжительность

Цель: 5 мс

Предел: < 20 мс

Пиковое выходное ускорение

Цель: Половина CLICK , 1 G

Ограничение: от 0,5 G до 1 G

Частота

Цель: 2x резонансная частота

Предел: < 500 Гц

Низкий тик примитивный

Примитив low tick — это более мягкая, слабая версия легкого tick, работающая в диапазоне низких частот для придания большего объема эффекту. Этот примитив также можно описать как щелчок средней интенсивности на низкой частоте, предназначенный для повторного использования для динамической обратной связи. Те же указания применимы для достижения короткого времени нарастания с использованием перегрузки двигателя или прямоугольной волны для начального начала. На рисунке 8 показан пример профиля выходного ускорения для примитива low tick:

Профиль ускорения выходного сигнала с низким тиком

Рисунок 8. Пример профиля ускорения выходного сигнала для примитива с малым тиком

Параметр Руководство
Продолжительность

Цель: 12 мс

Предел: < 30 мс

Пиковое выходное ускорение

Цель: 1/4 TICK , 0,25 G

Предел: от 0,2 G до 0,5 G

Частота

Цель: 2/3 резонансной частоты

Предел: < 100 Гц

Примитивы чириканья

Примитивы Chirp можно описать входными сигналами для уровня напряжения и частоты вибрации. Ускорение, которое двигатель может выдавать в различных диапазонах частот, зависит от кривой частотной характеристики привода. Диапазоны частот и уровни напряжения необходимо настраивать для каждого устройства.

Медленный рост примитивный

Медленный подъем — это медленная амплитуда и частота, поднимающаяся вверх с мягким началом и последовательно увеличивающейся интенсивностью вибрации по всей амплитуде. Это может быть реализовано путем последовательной развертки как амплитуды, так и частоты, используя более низкий диапазон частот, который работает вне резонанса. На рисунке 9 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации изменяется со временем.)

Входные параметры и выходной профиль ускорения для примитива с медленным подъемом

Рисунок 9. Входные параметры и пример выходного профиля ускорения для примитива с медленным подъемом

Если частотная характеристика двигателя ограничена (недостаточно сильна вне резонансной частоты), то альтернативной реализацией является синусоидальная развертка от 1/2x до 1x резонансной частоты. Резонанс двигателя способствует достижению пика сигнала в конце.

Параметр Руководство
Продолжительность

Цель: 500 мс

Допуск: 20 мс

Пиковое выходное ускорение

Цель: 0,5 G

Ограничение: от 0,5 G до 1 G

Частота

Цель: от 1/2 до 2/3 резонансной частоты

Альтернатива: 1/2 резонансной частоты

Быстрый рост примитивный

Быстрый подъем — это более быстрая амплитуда и частота развертки вверх с мягким началом и последовательно увеличивающейся интенсивностью вибрации по всей развертке. Выходные ускорение и целевые значения частоты вибрации должны быть такими же, как у примитива медленного подъема, достигаемые за более короткий промежуток времени. На рисунке 10 показаны входные параметры вибрации и пример профиля выходного ускорения для примитива медленного подъема. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации изменяется со временем.)

Входные параметры и выходной профиль ускорения для примитива быстрого подъема

Рисунок 10. Входные параметры и пример выходного профиля ускорения для примитива быстрого подъема

Параметр Руководство
Продолжительность

Цель: 150 мс

Допуск: 20 мс

Пиковое выходное ускорение

Цель: То же, что и SLOW_RISE

Лимит: такой же, как у SLOW_RISE

Частота

Цель: То же, что и SLOW_RISE

Альтернатива: То же, что и SLOW_RISE

Быстрое падение примитива

Быстрое падение — это быстрая амплитуда и частота спада с мягким началом. Вы можете использовать более высокую частоту в качестве начальной точки, пока двигатель набирает обороты, чтобы достичь пикового выходного ускорения. Частота должна последовательно уменьшаться по всей амплитуде, даже во время нарастания. На рисунке 11 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и показывает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует меткам частоты справа и показывает, как частота вибрации изменяется со временем.)

Входные параметры и выходной профиль ускорения для примитива быстрого падения

Рисунок 11. Входные параметры и пример выходного профиля ускорения для примитива быстрого падения

Параметр Руководство
Продолжительность

Цель: 100 мс

Допуск: 20 мс

Пиковое выходное ускорение

Цель: 1 G

Ограничение: от 0,5 G до 2 G

Частота

Цель: от 2x до 1x резонансной частоты

Глухой примитивный

Глухой стук — это глухой, низкий, ударный эффект, который имитирует физическое ощущение стука по полому дереву. Этот примитив работает в низкочастотном диапазоне, подобно примитиву низкого тика, чтобы придать эффекту больше объема. Вы можете реализовать примитив глухого удара как амплитудно-частотную развертку вниз в более низком частотном диапазоне (предпочтительно менее 100 Гц). На рисунке 12 показаны входные параметры и пример профиля выходного ускорения для этой реализации. (Красная линия соответствует меткам амплитуды слева и отображает, как амплитуда вибрации изменяется со временем. Синяя линия соответствует меткам частоты справа и отображает, как частота вибрации изменяется со временем.)

Входные параметры и выходной профиль ускорения для примитива thud

Рисунок 12. Входные параметры и пример выходного профиля ускорения для примитива thud

Если частотная характеристика двигателя ограничена, то альтернативной реализацией является начало с сигнала привода полной интенсивности на резонансной частоте и снижение до минимально возможной частоты, которую все еще можно воспринять. Этот подход может потребовать увеличения интенсивности сигнала привода на более низкой частоте, чтобы вибрация ощущалась.

Параметр Руководство
Продолжительность

Цель: 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 резонансной частоты