Одним из самых основных вариантов использования тактильных ощущений является обеспечение обратной связи при взаимодействии с пользователем. Выбор времени, нажатие клавиш на виртуальной клавиатуре и выделение текста — типичные примеры хорошего использования тактильной обратной связи. Дополнительную информацию о том, когда и как применять тактильные ощущения, можно найти в статье «Принципы проектирования тактильных ощущений» .
На этой странице описаны три способа обеспечения тактильной обратной связи.
- Используйте
View
(рекомендуется) . Этот подход ориентирован на действия, имеет самую широкую поддержку и не требует разрешенияVIBRATE
. - Используйте предопределенный
VibrationEffect
. Этот подход более гибок, но имеет некоторые компромиссы. - Используйте продвинутые композиции с примитивами . Этот метод более новый и еще более гибкий, но требует поддержки специального устройства.
Эти методы используют примитивы, определенные на уровне устройства, чтобы обеспечить высококачественную обратную связь, адаптированную к конкретному устройству.
Все методы тактильной обратной связи по умолчанию учитывают настройки сенсорной обратной связи пользователя.
Используйте компоненты View
для создания тактильной обратной связи.
Используйте метод View.performHapticFeedback
для создания тактильной обратной связи. Тактильные константы, определенные с помощью HapticFeedbackConstants
ориентированы на их функциональность в приложении, а не на тип выполняемого тактильного эффекта.
Базовая реализация может различаться в зависимости от устройства и возможностей оборудования, но приложению необходимо учитывать только тип обратной связи, которую необходимо предоставить в конкретном контексте. Сосредоточив внимание на функциональности, вы можете включить тактильную обратную связь для подобных взаимодействий. Со временем пользователи учатся ассоциировать разные значения с разными тактильными ощущениями.
Предварительные требования: включить тактильную обратную связь.
Пока View
отображается, для его событий можно использовать тактильную обратную связь. Некоторые события, такие как длительное нажатие, имеют тактильные ощущения по умолчанию, которые срабатывают, если прослушиватель в представлении обрабатывает событие (возвращает true
).
Android View
может отключить тактильную обратную связь, установив для свойства View.hapticFeedbackEnabled
значение false
. Отключение этого свойства приводит к обратной связи по умолчанию.
Метод performHapticFeedback
также учитывает системный параметр HAPTIC_FEEDBACK_ENABLED
, который позволяет пользователю потенциально отключить их для всей системы.
В отличие от других тактильных API, использование HapticFeedbackConstants
с View
не требует разрешения VIBRATE
.
Выберите HapticFeedbackConstant
При использовании компонентов View
с HapticFeedbackConstants
нет необходимости оценивать поддержку конкретного устройства, поскольку при необходимости эти константы будут иметь резервное поведение. Единственное, что следует учитывать, — это уровень SDK желаемой константы.
Пример 1: нажатие клавиши
Это пример того, как добавить тактильную обратную связь к сенсорному вводу в View
с помощью прослушивателей касаний. Эффекты имитируют ощущение нажатия на кнопку, а затем ее отпускания.
Котлин
class HapticTouchListener : View.OnTouchListener { override fun onTouch(View view, MotionEvent event) : Boolean { when (event.actionMasked) { MotionEvent.ACTION_DOWN -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) MotionEvent.ACTION_UP -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE) } return true } }
Ява
class HapticTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); break; case MotionEvent.ACTION_UP: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE); break; } return true; } }
Пример 2: кнопка «Отправить»
Варианты использования тактильной обратной связи выходят за рамки моделирования физического взаимодействия с устройством. Они также могут использоваться для передачи абстрактного значения. Например, обычно ожидается, что эффект CONFIRM
— это короткая и легкая вибрация, тогда как REJECT
может быть более сильной обратной связью, сигнализирующей о сбое. Это проиллюстрировано в следующем примере для обратной связи по кнопке отправки.
Котлин
submitButton.setOnClickListener { view -> val successful = performSubmit() if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM) } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT) } }
Ява
submitButton.setOnClickListener(view -> { boolean successful = performSubmit(); if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM); } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT); } });
Используйте предопределенный VibrationEffect
для создания тактильной обратной связи.
Использование подхода на основе View
фокусируется на взаимодействии с пользователем. Это предпочтительно для обеспечения единообразия во всей системе. Однако определенные предопределенные API-интерфейсы VibrationEffect
также можно вызывать для настройки эффектов тактильной обратной связи.
Предопределенные эффекты доступны в виде констант VibrationEffect
. Их можно проверить на наличие поддержки и воспроизвести с помощью службы Vibrator
, как показано в следующих примерах.
Понимать поддержку устройствами API VibrationEffect
.
При базовом использовании не должно быть необходимости проверять поддержку отдельных API VibrationEffect
. Такие API, как Vibrator.areEffectsSupported
и Vibrator.areAllEffectsSupported
, используются для определения того, имеет ли устройство настроенную реализацию константы. Если настроенный эффект отсутствует, ваше приложение все равно может воспроизводить эффекты и использовать резервную реализацию, определенную платформой.
Дополнительные сведения см. в разделе Предопределенный VibrationEffect
.
Предварительные требования: загрузите вибратор и разрешение VIBRATE
Большинство вибраций можно воспроизвести с помощью сервиса Vibrator
, который можно загрузить следующим образом:
Котлин
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Ява
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
Приложению необходимо иметь разрешение VIBRATE
, чтобы вибрировать на устройстве с помощью этой службы. Разрешение можно добавить в файл манифеста приложения:
<uses-permission android:name="android.permission.VIBRATE"/>
Воспроизведение предопределенного VibrationEffect
Предопределенные эффекты можно подготовить с помощью VibrationEffect.createPredefined
, а затем воспроизвести с помощью одного из методов vibrate
в Vibrator
.
В этом примере воспроизводится эффект щелчка.
Котлин
val vibrator = context.getSystemService(Vibrator::class.java) ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
Ява
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
Используйте сложные композиции с примитивами.
API VibrationEffect.Composition
предлагает дополнительные возможности для тактильной обратной связи. Однако, в отличие от эффектов, эти примитивы не имеют резервов на системном уровне, а это означает, что необходимо уделять пристальное внимание примитивам и другим возможностям, поддерживаемым устройством.
Использование этих API более подробно обсуждается в разделе «Создание пользовательских тактильных эффектов» .