Cómo agregar respuestas táctiles a eventos

Uno de los casos de uso más básicos de la tecnología táctil es proporcionar comentarios a las interacciones del usuario. Los selectores de hora, la presión de teclas en un teclado virtual y la selección de texto son ejemplos comunes de buenos casos de uso de la respuesta táctil. Para obtener más información sobre cuándo y cómo aplicar la tecnología táctil, consulta los Principios de diseño de la tecnología táctil.

En esta página, se describen tres formas de proporcionar respuesta táctil.

Estos métodos usan primitivas definidas a nivel del dispositivo para proporcionar comentarios de alta calidad adaptados al dispositivo en cuestión.

Todos los métodos de respuesta táctil respetan la configuración de la respuesta táctil del usuario de forma predeterminada.

Usa componentes de View para generar respuestas táctiles

Usa el método View.performHapticFeedback para generar respuestas táctiles. Las constantes táctiles que define HapticFeedbackConstants se centran en su funcionalidad en una aplicación, no en el tipo de efecto táctil que se realiza.

La implementación subyacente puede variar según las capacidades del dispositivo y el hardware, pero la app solo necesita tener en cuenta el tipo de comentarios que se proporcionará en un contexto particular. Si te enfocas en la funcionalidad, puedes habilitar la respuesta táctil para interacciones similares. Los usuarios aprenden a asociar distintos significados a diferentes sensaciones táctiles con el tiempo.

Requisitos: Habilita la respuesta táctil

Siempre que View sea visible, se puede usar la respuesta táctil para sus eventos. Algunos eventos, como mantener presionado, tienen una tecnología táctil predeterminada que se activa si un objeto de escucha de la vista controla el evento (muestra true).

Un View de Android puede inhabilitar la respuesta táctil estableciendo la propiedad View.hapticFeedbackEnabled en false. Si inhabilitas esta propiedad, se generarán comentarios predeterminados.

El método performHapticFeedback también respeta la configuración del sistema HAPTIC_FEEDBACK_ENABLED, que le permite al usuario inhabilitarlas para todo el sistema.

A diferencia de otras APIs de tecnología táctil, el uso de HapticFeedbackConstants con un View no requiere el permiso VIBRATE.

Elige una HapticFeedbackConstant

Cuando se usan componentes View con HapticFeedbackConstants, no es necesario evaluar la compatibilidad con dispositivos específicos, ya que estas constantes tendrán un comportamiento de resguardo si es necesario. La única consideración es el nivel de SDK de la constante deseada.

Ejemplo 1: Pulsación de teclas

Este es un ejemplo de cómo agregar una respuesta táctil a una entrada táctil en View con objetos de escucha táctiles. Los efectos simulan la sensación de mantener presionado un botón y, luego, soltarlo.

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;
  }
}

Ejemplo 2: Botón Enviar

Los casos de uso de la respuesta táctil van más allá de simular una interacción física con el dispositivo. También podrían usarse para transmitir un significado abstracto. Por ejemplo, la expectativa general de un efecto CONFIRM es una vibración corta y ligera, mientras que un REJECT puede ser una respuesta más sólida para la señal de falla. Esto se ilustra en el siguiente ejemplo de comentarios del botón de envío.

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);
  }
});

Usa un VibrationEffect predefinido para generar respuesta táctil

El enfoque basado en View se centra en la interacción del usuario. Se prefiere para mantener la coherencia en todo el sistema. Sin embargo, también se pueden invocar las APIs de VibrationEffect predefinidas específicas para efectos de respuesta táctil personalizados.

Los efectos predefinidos están disponibles como constantes VibrationEffect, y se pueden verificar la compatibilidad y jugar con el servicio Vibrator, como se muestra en los siguientes ejemplos.

Información sobre la compatibilidad de dispositivos con las APIs de VibrationEffect

En el uso básico, no debería ser necesario verificar la compatibilidad con las APIs de VibrationEffect individuales. Las APIs, como Vibrator.areEffectsSupported y Vibrator.areAllEffectsSupported, se usan para determinar si el dispositivo tiene una implementación personalizada de la constante. Si no hay un efecto personalizado presente, la app puede reproducirlos y usar una implementación de resguardo definida por la plataforma.

Para obtener más detalles, consulta VibrationEffect predefinido.

Requisitos previos: Carga el vibrador y el permiso VIBRATE

La mayoría de las vibraciones se pueden reproducir con el servicio Vibrator, que se puede cargar de la siguiente manera:

Kotlin

import android.os.Vibrator

val vibrator = context.getSystemService(Vibrator::class.java)

Java

import android.os.Vibrator;

Vibrator vibrator = context.getSystemService(Vibrator.class);

La app debe tener el permiso VIBRATE para hacer vibrar el dispositivo cuando usa este servicio. El permiso se puede agregar al archivo de manifiesto de la aplicación:

<uses-permission android:name="android.permission.VIBRATE"/>

Reproducir un VibrationEffect predefinido

Los efectos predefinidos se pueden preparar con VibrationEffect.createPredefined y, luego, reproducirse con uno de los métodos vibrate en Vibrator.

En este ejemplo, se reproduce un efecto de clic.

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));

Cómo usar composiciones avanzadas con primitivas

La API de VibrationEffect.Composition ofrece posibilidades adicionales para la respuesta táctil. Sin embargo, a diferencia de los efectos, estas primitivas no tienen resguardos a nivel del sistema, lo que significa que se debe prestar especial atención a las primitivas y otras capacidades compatibles con el dispositivo.

El uso de estas APIs se analiza con más detalle en Cómo crear efectos táctiles personalizados.