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

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

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

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

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

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