Uno de los casos de uso más básicos de la tecnología háptica es proporcionar comentarios sobre 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 para la respuesta háptica. Para obtener más información sobre cuándo y cómo aplicar la tecnología háptica, consulta Principios del diseño táctil.
En esta página, se describen tres formas de proporcionar respuesta táctil.
- Usa un
View(recomendado). Este enfoque está orientado a la acción, tiene la mayor compatibilidad y no requiere el permisoVIBRATE. - Usa un
VibrationEffectpredefinido. Este enfoque ofrece más flexibilidad, pero tiene algunas desventajas. - Usa composiciones ancladas en la línea de tiempo con
VibrationEffect.Builder. Este enfoque es el más flexible, ya que te permite secuenciar ajustes predeterminados, envolventes y otros elementos de vibración a lo largo de una línea de tiempo con compatibilidad automática integrada para resguardos.
Estos métodos usan elementos primitivos definidos a nivel del dispositivo para proporcionar comentarios de alta calidad adaptados al dispositivo en cuestión.
De forma predeterminada, todos los métodos de respuesta háptica respetan la configuración de respuesta táctil del usuario.
Usa componentes View para generar respuesta táctil
Usa el método View.performHapticFeedback para generar respuesta táctil. Las constantes hápticas definidas por HapticFeedbackConstants se centran en su funcionalidad en una aplicación, no en el tipo de efecto háptico que se realiza.
La implementación subyacente puede variar según el dispositivo y las capacidades de hardware, pero la app solo necesita considerar el tipo de comentarios que se deben proporcionar en un contexto particular. Si te enfocas en la funcionalidad, puedes habilitar la respuesta háptica para interacciones similares. Con el tiempo, los usuarios aprenden a asociar diferentes significados a diferentes sensaciones hápticas.
Requisitos previos: Habilita la respuesta táctil
Siempre que el View esté visible, se podrá usar la respuesta háptica para sus eventos.
Algunos eventos, como mantener presionado, tienen hápticos predeterminados que se activan si un objeto de escucha en la vista controla el evento (devuelve true).
Un View de Android puede inhabilitar la respuesta háptica configurando la propiedad View.hapticFeedbackEnabled en false. Si se inhabilita esta propiedad, se mostrarán comentarios predeterminados.
El método performHapticFeedback también respeta el parámetro de configuración del sistema HAPTIC_FEEDBACK_ENABLED, que permite al usuario inhabilitarlos potencialmente para todo el sistema.
A diferencia de otras APIs hápticas, usar HapticFeedbackConstants con un View no requiere el permiso VIBRATE.
Elige un 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 del SDK de la constante deseada.
Ejemplo 1: Presión de tecla
Este es un ejemplo de cómo agregar respuesta táctil a una entrada táctil en View con objetos de escucha táctiles. Los efectos simulan la sensación de presionar 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 de envío
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 se pueden usar para transmitir un significado abstracto. Por ejemplo, la expectativa general para un efecto de CONFIRM es una vibración corta y leve, mientras que un REJECT podría ser una respuesta más fuerte para indicar una falla. Esto se ilustra en el siguiente ejemplo de comentarios sobre un 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, por lo que se prefiere para mantener la coherencia en todo el sistema. Sin embargo, también puedes invocar APIs de VibrationEffect específicas predefinidas para obtener efectos de respuesta háptica personalizados.
Los efectos predefinidos están disponibles como constantes de VibrationEffect, y se puede verificar su compatibilidad y reproducirlos 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 de 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, tu app puede reproducir los efectos y usar una implementación de resguardo definida por la plataforma.
Para obtener más información, 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);
Tu app debe tener el permiso VIBRATE para hacer vibrar el dispositivo con este servicio. Puedes agregar este permiso 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, reproducir 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));
Usa VibrationEffect.Builder para crear composiciones
A partir de Android 16 (4º trimestre de 2026), la API de VibrationEffect.Builder ofrece la forma más flexible y expresiva de crear respuesta táctil personalizada secuenciando ajustes predeterminados, envolventes y otros elementos de vibración discretos a lo largo de una línea de tiempo.
Además, las composiciones creadas con VibrationEffect.Builder tienen compatibilidad automática integrada con alternativas en todos sus elementos admitidos.
En Cómo crear efectos táctiles personalizados, se explica con más detalle cómo componer efectos táctiles con VibrationEffect.Builder (y la API de VibrationEffect.Composition).