Как добавить тактильную обратную связь для событий

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

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

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

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

Как использовать компоненты 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 с помощью прослушивателей сенсорных событий. Они имитируют нажатие и отпускание кнопки.

Kotlin

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 – более сильная, чтобы сигнализировать о неудаче. Ниже приведен пример отзыва о кнопке отправки.

Kotlin

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, используются для определения того, есть ли на устройстве специальная реализация константы. Если специального эффекта нет, приложение может воспроизвести другие эффекты, используя реализацию по умолчанию, заданную платформой.

Подробнее о стандартных ролях VibrationEffect…

Предварительные условия: загрузите вибратор и разрешение VIBRATE

Большинство вибраций можно воспроизвести с помощью сервиса Vibrator, который можно загрузить следующим образом:

Kotlin

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.

В этом примере воспроизводится эффект щелчка.

Kotlin

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 (4 квартал 2026 г.), API VibrationEffect.Builder предлагает наиболее гибкий и выразительный способ создания пользовательского виброотклика путем последовательного использования дискретных предустановок, огибающих и других элементов вибрации на временной шкале. Кроме того, композиции, созданные с помощью VibrationEffect.Builder, имеют встроенную автоматическую поддержку резервных вариантов для всех поддерживаемых элементов.

Подробнее о создании виброэффектов с помощью VibrationEffect.Builder (и API VibrationEffect.Composition) рассказывается в разделе Создание собственных виброэффектов.