Внедрение тактильных ощущений

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

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

На этой странице представлен пошаговый контрольный список для настройки соответствия оборудования для наилучшего использования API тактильных ощущений Android.

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

Диаграмма вариантов использования тактильных ощущений для разработчиков приложений и производителей устройств

Рисунок 1. Наращивание знаний между производителями устройств и разработчиками

Контрольный список реализации тактильных ощущений

  1. Реализовать константы

    • Список констант для реализации тактильных ощущений.
  2. Константы сопоставления между HAL и API

  3. Оцените оборудование

    • Инструкции по целевым тактильным эффектам. Используйте эти инструкции для быстрой проверки вашего оборудования.

Ниже мы рассмотрим каждый из этих шагов более подробно.

Шаг 1: Реализуйте константы

Выполните эти проверки, чтобы определить, соответствует ли ваше устройство минимальным требованиям для реализации тактильных ощущений.

Блок-схема процесса внедрения тактильных ощущений

Рисунок 2. Реализация эффектов

Блок-схема шагов реализации примитивов

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

Проверьте статус реализации следующих тактильных констант.

Тактильные константы Места и резюме
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Класс VibrationEffect
Тактильные константы в VibrationEffect не включают понятие входных событий и не имеют элементов пользовательского интерфейса. Константы вместо этого включают понятие уровней энергии, таких как EFFECT_CLICK и EFFECT_HEAVY_CLICK , которые вызываются createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD Класс VibrationEffect.Composition
Тактильные константы в VibrationEffect.Composition могут иметь масштабируемую интенсивность, которая вызывается с помощью addPrimitive(int primitiveId, float scale, int delay) .

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

  1. EFFECT_CLICK

    Вибрация формы волны, созданная с помощью VibrationEffect.createWaveform , и тайминги, настроенные в frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Вибрация формы волны, созданная с помощью VibrationEffect.createWaveform , и тайминги, настроенные в frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Вибрация формы волны, созданная с помощью VibrationEffect.createWaveform и таймингов (0, 30, 100, 30).

  4. EFFECT_TICK

    Вибрация формы волны, созданная с помощью VibrationEffect.createWaveform , и тайминги, настроенные в frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Блок-схема шагов для тестирования тактильной обратной связи

Рисунок 4. Реализация констант обратной связи

Проверьте состояние следующих общедоступных констант обратной связи.

Тактильные константы Места и резюме

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() .

Шаг 2. Сопоставьте константы между HAL и API

На шаге 2 представлены рекомендуемые сопоставления между общедоступными константами HAL и константами API. Если аппаратное обеспечение, оцененное на шаге 1, не реализует константы HAL, то шаг 2 следует использовать для обновления резервных шаблонов, описанных на шаге 1, чтобы получить аналогичные выходные данные. Отображение поддерживается двумя разными моделями по умолчанию.

  • Дискретная модель (простая)

    • Амплитуда является ключевой переменной этой модели. Каждый объект в HAL представляет собой различную тактильную амплитуду.
    • Эта модель является минимальным требованием, необходимым для реализации базового тактильного UX.
    • Более продвинутый тактильный UX требует продвинутого оборудования и продвинутой модели (непрерывной модели).
  • Непрерывная модель (расширенная)

    • Текстура и амплитуда являются ключевыми переменными этой модели. Каждый объект в HAL представляет разные тактильные текстуры. Амплитуда каждого объекта HAL контролируется коэффициентом масштабирования ( S ).
    • Для этой модели требуется современное оборудование. Если OEM-производители хотят использовать расширенный тактильный UX с VibrationEffect.Composition (для наилучшего использования последних API-интерфейсов тактильных ощущений), рекомендуется реализовать свое оборудование с использованием этой модели.

Дискретная модель

Рекомендуется сопоставлять все общедоступные константы, предоставляемые в API, с соответствующими константами HAL. Чтобы начать этот процесс, выясните, сколько тактильных сигналов с дискретной амплитудой устройство может определить в HAL. Конкретный вопрос, построенный вокруг этого понятия, выглядит следующим образом: сколько одноимпульсных тактильных эффектов с воспринимаемой человеком разницей амплитуд можно определить в моем телефоне? Ответ на этот вопрос определяет отображение.

Определение констант HAL зависит от аппаратного обеспечения. Например, телефон начального уровня может иметь только аппаратные возможности для создания одной тактильной волны. Устройства с более совершенными аппаратными компонентами производят более широкий диапазон дискретных уровней амплитуды и могут определять несколько тактильных сигналов в HAL. Отображение констант HAL-API берет константу HAL (используя среднюю амплитуду в качестве базовой линии), а затем упорядочивает более сильные или слабые эффекты оттуда.

Диаграмма постоянного диапазона HAL и амплитуд обратной связи

Рисунок 5. Диапазон констант HAL по амплитуде

Когда количество констант HAL с дискретной амплитудой определено, пришло время отобразить константы HAL и API по количеству констант HAL. Этот процесс отображения может сегментировать одну константу API импульса на три дискретные группы уровней амплитуды. Способ сегментации констант API основан на принципах UX для сопровождения входных событий. Дополнительные сведения см. в разделе «Дизайн тактильного интерфейса пользователя» .

Дискретная модель для отображения констант HAL-API

Рисунок 6. Отображение констант HAL-API: дискретная модель

Если ваше устройство поддерживает только две константы HAL с дискретными амплитудами, рассмотрите возможность объединения констант HAL среднего и высокого уровня амплитуды. Примером этого понятия на практике может быть сопоставление EFFECT_CLICK и EFFECT_HEAVY_CLICK с одной и той же константой HAL, которая будет константой HAL уровня средней амплитуды. Если ваше устройство поддерживает только одну константу HAL с дискретной амплитудой, рассмотрите возможность объединения всех трех уровней в один.

Непрерывная модель

Непрерывная модель с масштабируемостью по амплитуде может применяться для определения констант HAL. К константам HAL (например, HAL_H0 , HAL_H1 ) можно применить масштабный коэффициент ( S ) для получения масштабированного HAL ( HAL_H0 x S ). В этом случае масштабированный HAL отображается для определения констант API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ), как показано на рисунке 7. Используя амплитудную масштабируемость непрерывной модели, устройство может хранить небольшое количество констант HAL с характерными текстурами. и добавьте вариации амплитуды, отрегулировав коэффициент масштабирования ( S ). Производители устройств могут определять количество констант HAL в зависимости от того, сколько различных тактильных текстур они хотят предоставить.

Постоянный диапазон HAL по текстуре и амплитуде

Рисунок 7. Диапазон констант HAL по текстуре (HAL_H0) и масштабу амплитуды (S)

Непрерывная модель для сопоставления констант HAL-API

Рисунок 8. Отображение констант HAL-API: непрерывная модель

В непрерывной модели разные константы HAL представляют разные тактильные текстуры , а не разные амплитуды; масштабный коэффициент ( S ) может настроить амплитуду. Однако, поскольку восприятие текстуры (например, резкость) связано с восприятием продолжительности и амплитуды, рекомендуется комбинировать текстуру и коэффициент масштабирования (в процессе проектирования отображения HAL-API).

Рисунок 7 иллюстрирует отображение констант путем увеличения вариации от одной HAL до множества констант API с масштабируемостью амплитуды.

Возрастающая вариация 1

Увеличение вариации 2

Рисунок 9. Увеличение вариации с масштабируемостью амплитуды

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

Для всех масштабируемых констант API, таких как PRIMITIVE_TICK и PRIMITIVE_CLICK в VibrationEffect.Composition , уровень энергии константы API зависит от параметра float scale с плавающей запятой, когда константа API объявлена ​​через addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK и PRIMITIVE_CLICK могут быть разработаны с четким различием, используя разные константы HAL. Этот подход рекомендуется, если вы хотите добавить вариации к текстуре .

Шаг 3: Оцените аппаратное обеспечение

Аппаратная оценка включает в себя определение трех тактильных эффектов, помеченных как Эффекты 1, 2 и 3 для этой конкретной оценки.

Эффект 1: Предопределенные короткие тактильные константы

Константа VibrationEffect.EFFECT_CLICK — это базовый эффект или общий знаменатель в отображении HAL-API, представленном на шаге 2. Оно сопоставлено с наиболее часто используемым эффектом, HapticFeedbackConstants.KEYBOARD_PRESS . Оценка этого эффекта помогает определить готовность вашего целевого устройства к четким тактильным ощущениям .

Эффект 2: короткий настраиваемый тактильный эффект

Константа VibrationEffect.createOneShot(20,255) предназначена для пользовательских тактильных эффектов. Для коротких одиночных настраиваемых импульсов рекомендуемым максимальным пороговым значением для определения продолжительности является 20 мс. Одиночный импульс продолжительностью более 20 мс не рекомендуется, так как он воспринимается как шумная вибрация .

Форма волны короткого пользовательского тактильного эффекта

Рисунок 10. Короткий пользовательский тактильный эффект

Эффект 3: Длинный настраиваемый тактильный эффект с изменением амплитуды

Константа VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) предназначена для длинных пользовательских эффектов с изменением амплитуды. Способность создавать различные амплитуды для настраиваемых тактильных эффектов является одним из показателей, позволяющих оценить возможности устройства в отношении насыщенных тактильных ощущений . Рекомендуемые timings [] и amplitudes [] равны {500, 500} и {128, 255} соответственно, что представляет тенденцию к увеличению амплитуды от 50% до 100% с частотой дискретизации 500 мс.

Форма волны тактильного эффекта с изменением амплитуды

Рис. 11. Длительный пользовательский тактильный эффект с изменением амплитуды

Чтобы проверить аппаратные возможности управления амплитудой для Эффекта 3, используйте метод Vibrator.hasAmplitudeControl() . Результат должен быть true , чтобы выполнить VibrationEffect.createWaveform с разной амплитудой, как предполагалось.

Блок-схема субъективной оценки тактильного эффекта

Рисунок 12. Оценка испытуемым тактильного эффекта 1, 2 и 3

Выполнение субъективной оценки

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

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