Implementa constantes y primitivas

La HAL del vibrador define las constantes y los elementos primitivos hápticos, y el framework de Android los asigna a las APIs públicas. Realiza estas verificaciones para determinar si tu dispositivo cumple con los requisitos mínimos para implementar la tecnología háptica:

Diagrama de flujo del proceso de implementación de la tecnología táctil

Figura 2: Implementa efectos

Diagrama de flujo de los pasos para implementar elementos básicos

Figura 3: Implementación de elementos primitivos

Implementa constantes

Los desarrolladores pueden usar las constantes hápticas en VibrationEffect a través de VibrationEffect.createPredefined(). Consulta el estado de implementación de las siguientes constantes hápticas.

Constantes de respuesta táctil Ubicaciones y resúmenes
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect clase
Las constantes de vibración en VibrationEffect no incluyen ninguna noción de eventos de entrada y no tienen elementos de IU. Las constantes incluyen la noción de niveles de energía, como EFFECT_CLICK y EFFECT_HEAVY_CLICK, a los que se llama con createPredefined().

Las vibraciones alternativas que se describen a continuación se realizan en dispositivos que no implementan las constantes de VibrationEffect. Se recomienda actualizar estos parámetros de configuración para que tengan el mejor rendimiento en esos dispositivos.

  • EFFECT_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos (0, 30, 100, 30).

  • EFFECT_TICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Diagrama de flujo de los pasos para probar la respuesta háptica

Figura 4: Implementación de constantes de comentarios

Los desarrolladores pueden usar las constantes hápticas en HapticFeedbackConstants a través de View.performHapticFeedback(). Verifica el estado de las siguientes constantes de comentarios públicos.

Constantes de respuesta táctil Ubicaciones y resúmenes
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END Clase HapticFeedbackConstants
Las constantes hápticas en HapticFeedbackConstants ayudan a los eventos de entrada con ciertos elementos de la IU, como KEYBOARD_PRESS y KEYBOARD_RELEASE, a los que llama performHapticFeedback().

Implementa elementos básicos

Las primitivas hápticas en VibrationEffect.Composition tienen una intensidad escalable que los desarrolladores pueden usar a través de addPrimitive(int primitiveId, float scale, int delay). Las primitivas se pueden dividir en dos categorías:

  • Primitivas cortas: Son primitivas con una duración corta, por lo general, menos de 20 ms. Estas son CLICK, TICK y LOW_TICK.

  • Primitivas de Chirp: Son primitivas con amplitud y frecuencia variables, por lo general, con una duración más larga que las primitivas cortas. Estos son SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD y SPIN.

Primitivas de Short

Las primitivas cortas se pueden describir con el perfil de aceleración de salida del motor vibratorio. La frecuencia absoluta utilizada varía para cada primitiva, según la frecuencia de resonancia del actuador. Consulta Cómo configurar el equipo de prueba para obtener más información sobre la configuración del hardware y las herramientas para medir la salida.

Una métrica de calidad valiosa para las vibraciones cortas es la relación entre el pulso y el timbre (PRR), que se muestra en la Figura 5. La PRR se define como la proporción entre el pulso principal, definido por el intervalo de la señal en el que la amplitud disminuye hasta el 10% de la amplitud máxima, y el pulso de timbre, definido por el intervalo de la señal en el que la amplitud disminuye del 10% de la amplitud máxima a menos del 1% de la amplitud máxima. La fórmula para el PRR es la siguiente:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Para obtener más información sobre la PRR, consulta Cómo analizar la forma de onda y, para obtener más información sobre cómo analizar y comparar los resultados, consulta Cómo comparar los resultados con el mapa de rendimiento.

Proporción de pulsaciones a llamadas

Figura 5: Definición de la proporción de pulsación a llamada

Aplica primitivas cortas como comentarios de entrada del usuario o reprodúcelas en composiciones más largas para crear texturas suaves. Esto significa que suelen activarse con frecuencia y reproducirse en rápida sucesión. La intensidad percibida de una sola primitiva corta puede aumentar la intensidad del efecto general. Por este motivo, calibra un solo tick o un elemento primitivo de pocos ticks con una composición más grande, por ejemplo, 100 ticks consecutivos.

Primitiva de clic

La primitiva de clic es un efecto fuerte y nítido que suele operar cerca de la frecuencia de resonancia de un dispositivo para alcanzar la potencia máxima en un período breve. Es más fuerte y profunda que las otras primitivas, y se ejecuta con la máxima intensidad.

Si está disponible, usa la sobremarcha del motor al principio y el frenado activo al final para lograr un tiempo de subida y bajada del motor corto. En el caso de algunos motores, usar una onda cuadrada en lugar de una onda sinusoidal puede lograr una aceleración más rápida. En la figura 6, se muestra un ejemplo de perfil de aceleración de salida para el componente Click:

Perfil de aceleración de salida de la primitiva de clic

Figura 6: Ejemplo de perfil de aceleración de salida para la primitiva de clic

Parámetro Guideline
Duración

Objetivo: 12 ms

Límite: < 30 ms

Aceleración de la salida máxima

Objetivo: 2 G

Límite: > 1 G

Frecuencia Aproximadamente en la frecuencia de resonancia

Marca primitiva (marca clara)

El elemento primitivo de tic es un efecto corto y nítido que suele operar en un rango de frecuencia más alto. Esta primitiva también se puede describir como un clic de intensidad media a una frecuencia más alta con una cola corta. La misma guía se aplica para lograr un tiempo de subida corto con sobremarcha del motor o una onda cuadrada para el inicio inicial, y un frenado activo en el desplazamiento. En la figura 7, se muestra un ejemplo de perfil de aceleración de salida para la primitiva de marca:

Perfil de aceleración del componente de salida de la marca

Figura 7: Ejemplo de perfil de aceleración de salida para la primitiva de marca

Parámetro Guideline
Duración

Objetivo: 5 ms

Límite: < 20 ms

Aceleración de la salida máxima

Objetivo: La mitad de CLICK, 1 G

Límite: Entre 0.5 G y 1 G

Frecuencia

Objetivo: 2 veces la frecuencia de resonancia

Límite: < 500 Hz

Primitiva de baja resolución

El elemento primitivo de tic bajo es una versión más suave y débil de un tic ligero, que opera en un rango de frecuencia más bajo para proporcionar más cuerpo al efecto. Este elemento primitivo también se puede describir como un clic de intensidad media con una frecuencia más baja, que se puede usar de forma repetitiva para obtener comentarios dinámicos. La misma guía se aplica para lograr un tiempo de subida corto con sobremarcha del motor o una onda cuadrada para el inicio inicial. En la figura 8, se muestra un ejemplo de perfil de aceleración de salida para la primitiva de baja resolución:

Perfil de aceleración de salida de primitivas de baja resolución

Figura 8: Ejemplo de perfil de aceleración de salida para un elemento primitivo de baja resolución

Parámetro Guideline
Duración

Objetivo: 12 ms

Límite: < 30 ms

Aceleración de la salida máxima

Objetivo: 1/4 de un TICK, 0.25 G

Límite: Entre 0.2 G y 0.5 G

Frecuencia

Objetivo: 2/3 de la frecuencia de resonancia

Límite: < 100 Hz

Primitivas de Chirp

Las primitivas de Chirp se pueden describir con los parámetros de entrada de nivel de voltaje y frecuencia de vibración. La aceleración que el motor puede generar en diferentes rangos de frecuencia varía según la curva de respuesta de frecuencia del actuador. Los rangos de frecuencia y los niveles de voltaje deben ajustarse para cada dispositivo.

Primitiva de aumento lento

El aumento lento es un barrido lento de amplitud y frecuencia hacia arriba con un inicio suave y una intensidad de vibración que aumenta de forma constante a lo largo del barrido. Se puede implementar con un barrido coherente de la amplitud y la frecuencia, con un rango de frecuencia más bajo que funcione fuera de la resonancia. En la figura 9, se muestran los parámetros de entrada y un ejemplo del perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de aumento lento

Figura 9: Parámetros de entrada y ejemplo del perfil de aceleración de salida para el elemento primitivo de aumento lento

Si la respuesta de frecuencia del motor es limitada (no es lo suficientemente fuerte fuera de su frecuencia de resonancia), una implementación alternativa es un barrido sinusoidal de 1/2 a 1 veces la frecuencia de resonancia. La resonancia del motor contribuye a alcanzar el pico de la señal al final.

Parámetro Guideline
Duración

Objetivo: 500 ms

Tolerancia: 20 ms

Aceleración de la salida máxima

Objetivo: 0.5 G

Límite: Entre 0.5 G y 1 G

Frecuencia

Objetivo: De 1/2 a 2/3 de la frecuencia de resonancia

Alternativa: De 1/2 a la frecuencia de resonancia

Primitiva de aumento rápido

El aumento rápido es un barrido más rápido de amplitud y frecuencia hacia arriba con un inicio suave y una intensidad de vibración que aumenta de forma constante en todo el barrido. Los objetivos de aceleración y frecuencia de vibración de salida deben ser los mismos que los de la primitiva de aumento lento, pero se alcanzan en un período más corto. En la figura 10, se muestran los parámetros de entrada de vibración y un ejemplo de perfil de aceleración de salida para el elemento primitivo de aumento lento. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de aumento rápido

Figura 10: Parámetros de entrada y ejemplo del perfil de aceleración de salida para la primitiva de aumento rápido

Parámetro Guideline
Duración

Objetivo: 150 ms

Tolerancia: 20 ms

Aceleración de la salida máxima

Objetivo: Igual que en SLOW_RISE

Límite: Igual que SLOW_RISE

Frecuencia

Objetivo: Igual que en SLOW_RISE

Alternativa: Igual que SLOW_RISE

Primitiva de caída rápida

La caída rápida es un barrido descendente rápido de amplitud y frecuencia con un inicio suave. Puedes usar una frecuencia más alta como punto de partida mientras el motor aumenta la velocidad para alcanzar la aceleración máxima de salida. La frecuencia debe disminuir de forma constante en todo el barrido, incluso durante el tiempo de subida. En la figura 11, se muestran los parámetros de entrada y un ejemplo de perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de caída rápida

Figura 11: Parámetros de entrada y ejemplo del perfil de aceleración de salida para el elemento primitivo de caída rápida

Parámetro Guideline
Duración

Objetivo: 100 ms

Tolerancia: 20 ms

Aceleración de la salida máxima

Objetivo: 1 G

Límite: Entre 0.5 G y 2 G

Frecuencia

Objetivo: De 2 a 1 veces la frecuencia de resonancia

Primitiva de golpe

El golpe es un efecto de percusión bajo y sordo que simula la sensación física de golpear madera hueca. Esta primitiva opera en un rango de frecuencia baja, similar a la primitiva de baja frecuencia, para proporcionar más cuerpo al efecto. Puedes implementar la primitiva de golpe seco como un barrido descendente de amplitud y frecuencia en un rango de frecuencia más bajo (preferentemente, menos de 100 Hz). En la figura 12, se muestran los parámetros de entrada y un ejemplo de perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para el elemento primitivo de golpe

Figura 12: Parámetros de entrada y ejemplo de perfil de aceleración de salida para el arquetipo de golpe

Si la respuesta de frecuencia del motor es limitada, una implementación alternativa es comenzar con una señal de transmisión de intensidad completa en la frecuencia resonante y reducirla a la frecuencia más baja posible que aún se pueda percibir. Este enfoque podría requerir un aumento de la intensidad de la señal de conducción en la frecuencia más baja para que se sienta la vibración.

Parámetro Guideline
Duración

Objetivo: 300 ms

Tolerancia: 20 ms

Aceleración de la salida máxima

Objetivo: 0.25 G

Límite: Entre 0.2 G y 0.5 G

Frecuencia

Objetivo: De 1/2 a 1/3 de la frecuencia de resonancia

Alternativa: De 1 a 1/2 de la frecuencia de resonancia

Primitiva de giro

El giro simula un impulso de giro rápido hacia arriba y hacia abajo con un ligero acento en el centro. El giro se puede implementar barriendo la amplitud y la frecuencia de forma independiente, en direcciones opuestas y seguido del movimiento inverso. Es importante usar un rango de frecuencia más bajo (preferentemente, menos de 100 Hz). En la figura 13, se muestran los parámetros de entrada y un ejemplo del perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Recomendamos que el elemento primitivo de rotación se llame dos veces seguidas o tres veces en las composiciones para lograr una sensación de rotación y de inestabilidad.

Si la respuesta de frecuencia del motor es limitada, una implementación alternativa es realizar un barrido sinusoidal rápido desde 1/2x hasta 1x la frecuencia resonante y viceversa. La resonancia del motor le da automáticamente al sonido un acento en el medio.

Parámetros de entrada y perfil de aceleración de salida para el elemento Spin

Figura 13: Parámetros de entrada y ejemplo del perfil de aceleración de salida para la primitiva de giro

Parámetro Guideline
Duración

Objetivo: 150 ms

Tolerancia: 20 ms

Aceleración de la salida máxima

Objetivo: 0.5 G

Límite: Entre 0.25 G y 0.75 G

Frecuencia

Objetivo: De 2/3 a 1/3 y, luego, de vuelta a 1/2 de la frecuencia de resonancia

Alternativa: De 2/3 a 1 veces, luego, vuelve a 1/2 de la frecuencia de resonancia