Все улучшения фреймворка Android, построенные вокруг тактильных ощущений, обусловлены набором принципов UX, которые развиваются с одинаковой скоростью. Текущие принципы включают замену жужжащей вибрации на четкие тактильные ощущения и изучение богатых тактильных ощущений .
Рисунок 1. Текущие принципы.
В следующей таблице перечислены все доступные API тактильных ощущений:
API | Методы и константы | Год добавления |
---|---|---|
android.view.HapticFeedbackConstants |
| До 2016 г. |
| 2017 (Андроид 8) | |
| 2020 (Андроид 11) | |
android.View |
| До 2016 г. |
android.os.Vibrator |
| До 2016 г. |
| 2017 (Андроид 8) | |
| 2020 (Андроид 11) | |
android.os.VibrationEffect |
| 2017 (Андроид 8) |
| 2019 (Андроид 10) | |
android.os.VibrationEffect.Composition |
| 2020 (Андроид 11) |
android.media.AudioAttributes.Builder |
| 2019 (Андроид 10) |
Жужжащая вибрация
Начиная с пейджеров и обычных телефонов, низкокачественные, но энергоэффективные вибрации на основе зуммера с эксцентриковой вращающейся массой (ERM) использовались в качестве замены слухового звонка в беззвучном режиме . Устаревшие аппаратные компоненты, которые производят громкие и неприятные звуковые шумы, могут нанести вред тактильному UX, создавая некачественные впечатления (например, дешевый сломанный телефон).
Ясные тактильные ощущения
Ясные тактильные ощущения поддерживают ощущение дискретных изменений состояния (например, бинарных изменений во время процесса включения и выключения питания). Из-за природы дискретного аффорданса ясные тактильные ощущения генерируются как единое целое (например, один тактильный эффект на одно событие ввода).
Android стремится обеспечить четкую тактильную чувствительность с сильными, но резкими ощущениями, а не вибрирующими или размытыми.
Предопределенные тактильные константы, созданные для поддержки четких тактильных ощущений, включают в себя следующие элементы.
-
CLOCK_TICK
-
CONFIRM
-
CONTEXT_CLICK
-
GESTURE_END
-
GESTURE_START
-
KEYBOARD_PRESS
-
KEYBOARD_RELEASE
-
KEYBOARD_TAP
-
LONG_PRESS
-
REJECT
-
TEXT_HANDLE_MOVE
-
VIRTUAL_KEY
-
VIRTUAL_KEY_RELEASE
В VibrationEffect
:
-
EFFECT_CLICK
-
EFFECT_DOUBLE_CLICK
-
EFFECT_HEAVY_CLICK
-
EFFECT_TICK
Формирование общих знаний между производителями устройств и разработчиками является ключом к повышению общего качества тактильных ощущений в экосистеме Android. Используйте базовый контрольный список , оценку оборудования и CDD . чтобы узнать больше о реализации тактильных ощущений.
Рисунок 2. Нажатие и отпускание.
Богатые тактильные ощущения
Rich haptics — это растущая категория haptics, которая выходит за рамки эффектов на основе отдельных импульсов. Android стремится поддерживать rich haptics с высокой компоновкой и настраиваемостью с тонким уровнем детализации. Следующие варианты использования поддерживаются в Android 11 или ниже.
Рисунок 3. Богатая тактильная чувствительность со скользящей текстурой.
Рисунок 4. Перетаскивание и смахивание.
Вариант использования 1: Скользящая текстура
Если тактильный эффект повторяется при скольжении пальца по сенсорной поверхности (например, при перетаскивании, проведении пальцем, исследовании поверхности с фантомной тактильной текстурой), то повторяющиеся тактильные эффекты предпочтительно должны быть четкими и едва уловимыми.
Если индивидуальный эффект скорее жужжащий, чем четкий, то интервалы между повторениями, скорее всего, будут стерты. Результатом будет один длинный жужжащий сигнал, а не несколько дискретных сигналов.
Если амплитуда недостаточно мала, то воспринимаемая тактильная энергия накапливается по мере повторения, что приводит к чрезвычайно сильным тактильным ощущениям в конце повторения.
Реализовать тактильную текстуру поверхности для жестов смахивания и перетаскивания
Используйте CLOCK_TICK
и TEXT_HANDLE_MOVE
в HapticFeedbackConstants
. Эти константы предопределяют характеристики повторения и амплитуды.
Создайте свой собственный эффект
Чтобы создать свой собственный эффект, составьте дизайн, соединив последовательности PRIMITIVE_CLICK
и PRIMITIVE_TICK
в VibrationEffect.Composition
. Вы можете настроить характеристики шкалы повторения и амплитуды с помощью addPrimitive(int primitiveID, float scale, int delay)
. Поддержка основана на возможности CAP_COMPOSE_EFFECTS
интерфейса Vibrator HAL .
Вариант использования 2: Длительная вибрация с эффектом облегчения
Длительная вибрация — это плавная амплитудная вибрация, которая переходит от 0 до целевой амплитуды. Длительная вибрация может генерировать воспринимаемые тактильные ощущения внимания. Однако внезапная длительная вибрация может напугать пользователей в тихой обстановке и часто производит слышимые жужжащие звуки. Чтобы создать более приятную длительную вибрацию, примените эффект ease-in в начале длительной вибрации. Это создает плавный переход амплитуды, который нарастает в направлении целевой амплитуды.
Применить эффект плавности
Проверьте аппаратные возможности управления амплитудой с помощью
android.os.Vibrator.hasAmplitudeControl()
.- Результат должен быть
true
, чтобы создать эффект плавности с переменной амплитудой.
- Результат должен быть
Используйте
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
.Отрегулируйте ряд
timings[]
иamplitudes[]
чтобы создать кривую плавности, как показано на рисунке 5.
Рисунок 5. Длинная кривая снижения вибрации.
Вариант использования 3: тактильные ощущения, связанные со звуком
Тактильные эффекты, связанные со звуком, представляют собой тактильные паттерны, сопряженные с ритмом звука, для привлечения внимания пользователя.
Аудиосвязанные тактильные ощущения: преимущества
Чтобы реализовать аудиосвязанную тактильную связь, объедините четкую тактильную связь с длительными вибрациями. Сильные, но короткие тактильные ощущения от четких тактильных связей создают дискретные ритмические узоры. В сочетании с высокими уровнями стимулов, которые обеспечивает длительная вибрация, это отлично привлекает внимание пользователя.
Важно учитывать ритмические паттерны ощущений. Если нет чувства ритма, пользователь воспринимает тактильные ощущения как случайные жужжания и склонен игнорировать их.
Рисунок 6. Пример тактильной связи аудиопары.
Аудиосвязанные тактильные ощущения: советы по внедрению
Реализация аудио-связанных тактильных сигналов требует базового понимания воспроизведения контента как аудио-, так и тактильных каналов. Имейте в виду следующее:
Используйте классы
MediaPlayer
илиSoundPool
.- Активы в формате OGG со специальным ключом метаданных (
ANDROID_HAPTIC
, за которым следует ряд тактильных каналов) указывают на наличие тактильных данных и воспроизведение с помощьюMediaPlayer
иSoundPool
.
- Активы в формате OGG со специальным ключом метаданных (
Укажите поддержку тактильных ощущений и воспроизведения звука в
audio_policy_configuration.xml
.- Используйте выходной профиль с тактильным каналом
AUDIO_CHANNEL_OUT_HAPTIC_A|B
. - Для выходного потока с тактильными каналами помните, что тактильные каналы представлены в данных как дополнительные каналы.
Пример
Если маска канала для выходного потока выглядит следующим образом:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Тогда каждый образец должен выглядеть так:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Используйте выходной профиль с тактильным каналом
Измените
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
наfalse
, чтобы воспроизвести тактильный канал.- По умолчанию тактильные каналы отключены (
true
). - Варианты использования включают рингтоны и звуки пользовательского интерфейса с синхронной тактильной реализацией и обратной связью.
- По умолчанию тактильные каналы отключены (
Вибратор HAL должен реализовывать поддержку внешнего управления.
- Для реализаций HIDL используйте
setExternalControl(bool enabled) generates (Status status)
. - Для реализаций AIDL используйте
void setExternalControl(in boolean enabled)
.
- Для реализаций HIDL используйте
Рисунок 7. Реализация аудиосвязанной тактильной чувствительности.
Аудиосвязанная тактильная связь: HapticGenerator
HapticGenerator
— это аудиоэффект, представленный в Android 12, который может генерировать тактильные данные из аудиоканала и воспроизводить их в реальном времени как аудиосвязанные тактильные данные . Эффект применяется к AudioTrack
, как показано на рисунке 8:
Рисунок 8. Архитектура тактильного генератора.
Эта визуализация архитектуры показывает, где Haptic Generator применяется к входящему пользовательскому аудиопотоку перед его отправкой в Audio HAL. Генератор применяется после того, как AudioMixer
разделяет аудио и тактильные данные и перед любым другим аудиоэффектом, и его вывод переопределяет любые предыдущие тактильные данные в потоке.
Чтобы убедиться, что ваш алгоритм генератора тактильных ощущений генерирует высококачественные тактильные ощущения, настройте алгоритм генерации на вибромотор устройства, отрегулировав параметры, которые настраивают цепочку фильтров, применяемых к аудиосигналам. В этом разделе эти параметры подробно описаны и объясняется, как настроить их на технические характеристики вашего оборудования.
Резонансная частота для полосового фильтра
Резонансная частота вибратора — это частота, на которой тактильный привод имеет максимальный выход. Этот параметр настраивает антирезонатор для частичного выравнивания передаточной функции отклика, чтобы получить более широкую полосу пропускания. Фреймворк Android автоматически связывает это значение с выходом метода HAL вибратора
IVibrator.getResonantFrequency
.Значение по умолчанию для этого параметра 150 Гц . Вы можете изменить это в коде .
Нормализация мощности для медленной огибающей
Этот параметр определяет показатель степени в частичной нормализации (автоматическая регулировка усиления). Его значение по умолчанию равно -0,8 , что означает, что 80% вариации динамического диапазона удаляется этим шагом регулировки усиления. Вы можете изменить это в коде .
Q-фактор для полосового фильтра
Добротность вибратора (Q-фактор) определяется двумя параметрами:
Нулевая добротность, добротность нулей в полосовом фильтре, который частично подавляет резонанс
Полюс Q, добротность полюсов в полосовом фильтре
Соотношение этих двух значений ограничивает подавление резонанса для усиления нижних частот и расширения отклика алгоритма. Например, значения по умолчанию 8 для Zero Q и 4 для Pole Q дают отношение 2 , ограничивая подавление резонанса в 2 раза (6 дБ). Фреймворк Android связывает оба значения с выходом метода HAL вибратора
IVibrator.getQFactor
.Если значения по умолчанию не учитывают демпфирование силы двигателя в вашем устройстве, мы рекомендуем изменить оба значения одновременно и либо увеличить оба, либо уменьшить оба. Отношение нулевой добротности к полюсной добротности должно быть больше 1. Вы можете изменить это в коде .
Частота среза для искажения
Частота среза применяется фильтром нижних частот, который подавляет низкоуровневую вибрацию и усиливает более высокие уровни с помощью кубического искажения. По умолчанию она равна 300 Гц . Вы можете изменить это в коде .
Входное усиление и порог куба для искажения
Эти параметры используются нелинейным фильтром искажений, применяемым к входному сигналу, который ослабляет амплитуду низкочастотных сигналов и увеличивает амплитуду высокочастотных сигналов.
- Значение коэффициента усиления входного сигнала по умолчанию составляет 0,3 .
- Значение по умолчанию для порога куба — 0,1 .
Мы рекомендуем изменять оба значения одновременно. Их можно найти в коде .
Более подробную информацию о функции, применяемой этим фильтром, можно найти в реализации кода .
Чтобы узнать больше о том, как эти два параметра влияют на выходной сигнал, мы рекомендуем построить графики частотных характеристик фильтров и понаблюдать, как изменяются частотные характеристики при различных значениях параметров.
Выходное усиление искажений
Этот параметр управляет конечной амплитудой вибрации. Это конечное усиление, применяемое после мягкого ограничителя, который ограничивает амплитуды вибрации до менее 1. Его значение по умолчанию — 1,5 , и вы можете изменить его в коде .
Если вибрация слишком слабая, увеличьте значение. Если вы слышите дребезжание оборудования привода, уменьшите значение.