Todas las mejoras del framework de Android compiladas en torno a la tecnología táctil se basan en un conjunto de principios de UX que evolucionan a un ritmo similar. Los principios actuales implican reemplazar la vibración zumbante por tecnología táctil clara y explorar la tecnología táctil enriquecida.
Figura 1: Principios actuales
En la siguiente tabla, se enumeran todas las APIs de tecnología táctil disponibles.
API | Métodos | Año agregado |
---|---|---|
android.view.HapticFeedbackConstants |
|
Antes de 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.View |
|
Antes de 2016 |
android.os.vibrador |
|
Antes de 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.VibrationEffect |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.VibrationEffect.Composition |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Vibración zumbante
Desde los buscapersonas y los teléfonos con funciones, se han usado vibraciones basadas en timbres de ERM de baja calidad, pero eficientes en términos de energía, como sustitutos del timbre auditivo en el modo silencioso. Los componentes de hardware heredados que producen ruidos audibles fuertes y desagradables pueden dañar la UX táctil, ya que proporcionan impresiones de baja calidad (por ejemplo, un teléfono barato y roto).
Cómo borrar la tecnología táctil
La tecnología táctil clara admite la sensación de cambios de estado discretos (por ejemplo, cambios binarios durante el proceso de encendido o apagado). Debido a la naturaleza de la indicación discreta, las respuestas táctiles claras se generan como una sola entidad (por ejemplo, un efecto táctil por un evento de entrada).
El objetivo de Android es ofrecer una tecnología háptica clara con sensaciones fuertes pero nítidas en lugar de aquellas que resultan animadas o serenas.
Las constantes táctiles predefinidas que se crean para admitir la tecnología táctil clara incluyen las siguientes:
CLOCK_TICK
CONFIRM
CONTEXT_CLICK
GESTURE_END
GESTURE_START
KEYBOARD_PRESS
KEYBOARD_RELEASE
KEYBOARD_TAP
LONG_PRESS
REJECT
TEXT_HANDLE_MOVE
VIRTUAL_KEY
VIRTUAL_KEY_RELEASE
En VibrationEffect
:
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Desarrollar un conocimiento común entre los fabricantes y desarrolladores de dispositivos es clave para mejorar la calidad general de la tecnología táctil en el ecosistema de Android. Usa la lista de tareas básicas, la evaluación de hardware y el CDD para obtener más información sobre la implementación de la tecnología táctil.
Figura 3: Presiona y suelta.
Tecnología táctil enriquecida
La haptics enriquecida es una categoría de tecnología táctil en crecimiento que va más allá de los efectos basados en un solo impulso. El objetivo de Android es admitir una tecnología táctil enriquecida con alta componibilidad y capacidad de ajuste con un nivel de detalle fino. Los siguientes casos de uso son compatibles con Android 11 o versiones anteriores.
Figura 4: Tecnología háptica enriquecida con textura que se desliza
Figura 5: Arrastrar y deslizar
Caso de uso 1: Textura deslizante
Si se repite un efecto táctil mientras el dedo se desliza sobre una superficie táctil (por ejemplo, arrastrar, deslizar o explorar la superficie con una textura táctil fantasma), los efectos táctiles repetidos son preferiblemente nítidos y sutiles.
Si el efecto individual es zumbido en lugar de nítido, es probable que los intervalos entre las repeticiones se borren. El resultado es un zumbido largo, en lugar de varios indicadores discretos.
Si la amplitud no es lo suficientemente sutil, la energía táctil percibida se acumula a través de la repetición, lo que genera una respuesta táctil abrumadoramente fuerte al final de la repetición.
Implementa una textura táctil de superficie simple para los gestos de deslizamiento y arrastre
Usa CLOCK_TICK
y TEXT_HANDLE_MOVE
en HapticFeedbackConstants
.
Estas constantes definen previamente las características de repetición y amplitud.
Crea tu propio efecto
Para crear tu propio efecto, crea un diseño uniendo secuencias de PRIMITIVE_CLICK
y PRIMITIVE_TICK
en VibrationEffect.Composition
.
Puedes ajustar las características de la repetición y la escala de amplitud con addPrimitive(int primitiveID, float scale, int delay)
. La compatibilidad se basa en la función CAP_COMPOSE_EFFECTS
de la interfaz de HAL del vibrador.
Caso de uso 2: Vibración larga con efecto de entrada suave
La vibración larga es una vibración de amplitud suave que pasa de 0 a la amplitud objetivo. La vibración larga puede generar una tecnología táctil de atención perceptible con facilidad. Sin embargo, una vibración larga y repentina puede asustar a los usuarios en un entorno tranquilo y, a menudo, produce ruidos audibles. Para generar una vibración larga más agradable, aplica el efecto de entrada lenta al comienzo de la vibración larga. Esto produce una transición de amplitud suave que se genera hacia la amplitud objetivo.
Aplica el efecto de entrada suave
Verifica las capacidades de hardware del control de amplitud con
android.os.Vibrator.hasAmplitudeControl()
.- El resultado debe ser
true
para producir un efecto de entrada lenta con amplitud variable.
- El resultado debe ser
Usa
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
.Ajusta la serie de
timings[]
yamplitudes[]
para generar la curva de atenuación, como se muestra en la Figura 6.
Figura 6: Curva de entrada suave de vibración larga
Caso de uso 3: Tecnología táctil con acoplamiento de audio
La tecnología táctil vinculada con audio son patrones táctiles junto con el ritmo del audio para llamar la atención del usuario.
Tecnología táctil con acoplamiento de audio: Beneficios
Para implementar la tecnología táctil vinculada con audio, combina la tecnología táctil clara con vibraciones largas. Las sensaciones táctiles fuertes pero cortas de la tecnología táctil clara proporcionan patrones rítmicos discretos. Cuando se combina con los altos niveles de estímulos que proporciona la vibración prolongada, es muy eficaz para captar la atención del usuario.
Es importante considerar los patrones rítmicos de la sensación. Si no hay un sentido de ritmo, el usuario percibe las sensaciones táctiles como zumbidos aleatorios y tiende a ignorarlas.
Figura 7: Ejemplo de respuesta táctil vinculada con audio
Táctil vinculado con audio: Sugerencias para la implementación
La implementación de tecnología táctil vinculada con audio requiere una comprensión básica de la reproducción de contenido de los canales táctiles y de audio. Ten en cuenta lo siguiente.
Usa las clases
MediaPlayer
oSoundPool
.- Los activos en formato OGG con una clave de metadatos especial (
ANDROID_HAPTIC
seguida de una cantidad de canales táctiles) indican la presencia de datos táctiles y la reproducción conMediaPlayer
ySoundPool
.
- Los activos en formato OGG con una clave de metadatos especial (
Indica la compatibilidad con la tecnología táctil y la reproducción de audio en
audio_policy_configuration.xml
.- Usa un perfil de salida con el canal de haptics
AUDIO_CHANNEL_OUT_HAPTIC_A|B
. - Para un flujo de salida con canales táctiles, recuerda que los canales táctiles se presentan como canales adicionales en los datos.
Ejemplo
Si la máscara de canales para la transmisión de salida se ve de la siguiente manera:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Luego, cada muestra debería verse de la siguiente manera:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Usa un perfil de salida con el canal de haptics
Cambia
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
afalse
para reproducir el canal táctil.- De forma predeterminada, los canales táctiles están silenciados (
true
). - Los casos de uso incluyen tonos y sonidos de la IU con tecnología táctil síncrona y comentarios.
- De forma predeterminada, los canales táctiles están silenciados (
El HAL del vibrador debe implementar la compatibilidad con el control externo.
- Para implementaciones de HIDL, usa
setExternalControl(bool enabled) generates (Status status)
. - Para implementaciones de AIDL, usa
void setExternalControl(in boolean enabled)
.
- Para implementaciones de HIDL, usa
Figura 8: Implementa la tecnología táctil vinculada con audio
Tecnología táctil vinculada con audio: Generador táctil
HapticGenerator
es un efecto de audio que se introdujo en Android 12 y que puede generar datos táctiles de un canal de audio y reproducirlos en tiempo real como tecnología táctil vinculada con audio.
El efecto se aplica a AudioTrack
como se describe en la Figura 9.
Figura 9: Arquitectura del generador táctil
Para asegurarte de que el algoritmo del generador de efectos táctiles genere efectos táctiles de alta calidad, ajusta el algoritmo de generación al motor del vibrador del dispositivo ajustando los parámetros que configuran la cadena de filtros que se aplica a las formas de onda de audio. En esta sección, se describen estos parámetros en detalle y se explica cómo ajustarlos según las especificaciones de hardware.
Frecuencia resonante para el filtro pasabanda
La frecuencia resonante del vibrador es la frecuencia a la que un actuador táctil tiene la salida máxima. Este parámetro ajusta un antirresonador para compactar parcialmente la función de transferencia de respuestas a fin de obtener un ancho de banda más amplio. El framework de Android vincula automáticamente este valor al resultado del método HAL del vibrador
IVibrator.getResonantFrequency
.El valor predeterminado para este parámetro es 150 Hz. Esto se puede modificar en el código aquí.
Potencia de normalización para envolvente lento
Este parámetro determina el exponente en la normalización parcial (control automático de ganancia). Su valor predeterminado es -0.8, lo que significa que este paso de control de ganancia quita el 80% de la variación del rango dinámico. Esto se puede modificar en el código aquí.
Factor Q para el filtro de supresión de banda
El factor de calidad del vibrador (factor Q) se determina en función de dos parámetros:
El Q cero, el factor de calidad de los ceros en el filtro de detención de banda que cancela parcialmente la resonancia.
El Pole Q, el factor de calidad de los polos en el filtro de tope de banda.
La proporción de esos dos valores limita la supresión de la resonancia para mejorar las frecuencias más bajas y ampliar la respuesta del algoritmo. Por ejemplo, los valores predeterminados de 8 para el Q cero y 4 para el Q del polo producen una relación de 2, lo que limita la supresión de resonancia en un factor de 2 (6 dB). El framework de Android vincula ambos valores al resultado del método HAL del vibrador
IVibrator.getQFactor
.Si los valores predeterminados no tienen en cuenta la amortiguación de la fuerza del motor en el dispositivo, te recomendamos que modifiques ambos valores al mismo tiempo y que los aumentes o disminuyas. La relación entre Q cero y Q de polo debe ser mayor que 1. Esto se puede modificar en el código aquí.
Frecuencia de esquina para la distorsión
La frecuencia de esquina se aplica con un filtro de paso bajo que suprime la vibración de bajo nivel y mejora los niveles más altos con una distorsión cúbica. El valor predeterminado es 300 Hz. Esto se puede modificar en el código aquí.
Ganancia de entrada y umbral de cubo para la distorsión
Estos parámetros los usa un filtro de distorsión no lineal aplicado a la forma de onda de entrada que atenúa la amplitud de los indicadores de frecuencia más baja y aumenta los de frecuencia más alta.
- El valor predeterminado para el factor de ganancia de entrada es 0.3.
- El valor predeterminado para el umbral del cubo es 0.1.
Te recomendamos modificar ambos valores a la vez. Puedes encontrarlas en el código aquí.
Para obtener más información sobre la función que aplica este filtro, consulta la implementación disponible aquí. Para obtener más información sobre cómo estos dos parámetros influyen en el resultado, recomendamos trazar las respuestas de frecuencia de los filtros y observar cómo cambian las respuestas de frecuencia con diferentes valores del parámetro.
Ganancia de salida para la distorsión
Este parámetro controla la amplitud de vibración final. Es una ganancia final que se aplica después de un limitador suave que limita las amplitudes de la vibración a menos de 1. Su valor predeterminado es 1.5 y se puede modificar en el código aquí. Si la vibración es demasiado sutil, aumenta el valor. Si escuchas el hardware del actuador rechinando, disminuye el valor.