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 tecnología táctil.
En esta página, se describen tres formas de proporcionar respuestas táctiles.
- Usa un
View
(recomendado). Este enfoque está orientado a la acción, tiene la compatibilidad más amplia y no requiere el permisoVIBRATE
. - Usa un
VibrationEffect
predefinido. Este enfoque es más flexible, pero tiene algunas desventajas. - Usa composiciones avanzadas con primitivas. Este método es más reciente y aún más flexible, pero requiere compatibilidad específica con dispositivos.
Estos métodos usan primitivas definidas a nivel del dispositivo para proporcionar comentarios de alta calidad personalizados según el dispositivo en cuestión.
Todos los métodos de respuesta táctil respetan la configuración de respuestas táctiles del usuario de forma predeterminada.
Usa componentes View
para generar respuestas táctiles
Usa el método View.performHapticFeedback
para generar respuestas táctiles. Las constantes táctiles definidas por HapticFeedbackConstants
se enfocan 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 considerar el tipo de comentarios que se deben proporcionar en un contexto particular. Si te enfocas en la funcionalidad, puedes habilitar la respuesta táctil para interacciones similares. Con el tiempo, los usuarios aprenden a asociar distintos significados a distintas sensaciones táctiles.
Requisitos previos: 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 en la vista controla el evento (muestra true
).
Un View
de Android puede inhabilitar la respuesta táctil configurando la propiedad View.hapticFeedbackEnabled
como 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 permite que el usuario pueda inhabilitarlas para todo el sistema.
A diferencia de otras APIs táctiles, usar 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: Presión de teclas
Este es un ejemplo de cómo agregar una respuesta táctil a una entrada táctil en View
usando 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 Enviar
Los casos de uso de respuesta táctil van más allá de la simulación de una interacción física con el dispositivo. También pueden usarse para transmitir un significado abstracto. Por ejemplo, la expectativa general para 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 para un comentario de 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 respuestas táctiles
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 haber necesidad de 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 aún puede reproducirlos y usar una implementación de resguardo definida por la plataforma.
Para obtener más información, consulta VibrationEffect
predefinida.
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 que 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 de 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 que admite el dispositivo.
El uso de estas APIs se analiza con más detalle en Cómo crear efectos táctiles personalizados.