Добавьте тактильную обратную связь к событиям

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

На этой странице описаны три способа обеспечения тактильной обратной связи.

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

Все методы тактильной обратной связи по умолчанию учитывают настройки тактильной обратной связи пользователя.

Используйте компоненты 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
  }
}

Ява

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 более подробно обсуждается в разделе Создание пользовательских тактильных эффектов .