Реализуйте тактильную обратную связь в приложениях Android, используя компоненты View, предопределенные API VibrationEffect и композиции, привязанные к временной шкале, с помощью VibrationEffect.Builder. keywords_public: > Разработка Android, тактильная обратная связь, пользовательский интерфейс, представления, VibrationEffect, View.performHapticFeedback, Vibrator, константы тактильной обратной связи
Один из самых простых вариантов использования тактильной обратной связи — это предоставление обратной связи при взаимодействии с пользователем. Выбор времени, нажатие клавиш на виртуальной клавиатуре и выделение текста — распространенные примеры хорошего применения тактильной обратной связи. Для получения дополнительной информации о том, когда и как применять тактильную обратную связь, прочитайте раздел «Принципы проектирования тактильной обратной связи» .
На этой странице описаны три способа обеспечения тактильной обратной связи.
- Используйте
View(рекомендуется) . Этот подход ориентирован на действия, имеет самую широкую поддержку и не требует разрешенияVIBRATE. - Используйте предопределенный
VibrationEffect. Этот подход обеспечивает большую гибкость, но с некоторыми компромиссами. - Используйте композиции, привязанные к временной шкале, с помощью
VibrationEffect.Builder. Этот подход является наиболее гибким, позволяя вам последовательно располагать пресеты, огибающие и другие элементы вибрации вдоль временной шкалы со встроенной поддержкой автоматического резервного копирования.
Эти методы используют примитивы, определенные на уровне устройства, для обеспечения высококачественной обратной связи, адаптированной к конкретному устройству.
Все методы тактильной обратной связи по умолчанию учитывают настройки тактильной обратной связи, заданные пользователем.
Используйте компоненты View для генерации тактильной обратной связи.
Для генерации тактильной обратной связи используйте метод View.performHapticFeedback . Константы тактильной обратной связи, определенные в HapticFeedbackConstants ориентированы на их функциональность в приложении, а не на тип выполняемого тактильного эффекта.
Реализация может варьироваться в зависимости от устройства и аппаратных возможностей, но приложению нужно учитывать только тип обратной связи, предоставляемой в конкретном контексте. Сосредоточившись на функциональности, вы можете включить тактильную обратную связь для аналогичных взаимодействий. Со временем пользователи учатся связывать разные значения с разными тактильными ощущениями.
Предварительные условия: включить тактильную обратную связь.
Пока View виден, для обработки его событий можно использовать тактильную обратную связь. Некоторые события, такие как касание и удержание, имеют тактильную обратную связь по умолчанию, которая срабатывает, если обработчик события на 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 } }
Java
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) } }
Java
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 , используются для определения того, имеет ли устройство собственную реализацию константы. Если пользовательский эффект отсутствует, ваше приложение все равно сможет воспроизводить эффекты и использовать резервную реализацию, определенную платформой.
Для получения более подробной информации см. Predefined VibrationEffect .
Предварительные условия: Загрузка вибратора и наличие разрешения VIBRATE
Большинство вибраций можно воспроизвести с помощью сервиса Vibrator , который можно загрузить следующим образом:
Котлин
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
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))
Java
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
Используйте VibrationEffect.Builder для создания композиций.
Начиная с Android 16 (26Q4), API VibrationEffect.Builder предлагает наиболее гибкий и выразительный способ создания пользовательской тактильной обратной связи путем последовательного размещения дискретных пресетов, огибающих и других элементов вибрации вдоль временной шкалы. Кроме того, композиции, созданные с помощью VibrationEffect.Builder , имеют встроенную поддержку автоматического резервного варианта для поддерживаемых элементов.
Более подробно о создании тактильных эффектов с помощью VibrationEffect.Builder (и API VibrationEffect.Composition ) рассказывается в разделе «Создание пользовательских тактильных эффектов» .