Base de UX para el framework táctil

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.

Principios de UX

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
  • CLIC CONTEXTO
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • LONG_PRESS
Antes de 2016
  • PRESIÓN_DE_TECLADO
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android 8)
  • CONFIRMAR
  • RECHAZAR
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • performHapticFeedback()
Antes de 2016
android.os.vibrador
  • vibrate()
  • hasVibrator()
Antes de 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFECTO_TICK
  • EFECTO CLIC
  • EFFECT_HEAVY_CLICK
  • EFECTO_DOUBLE_CLIC
  • createPredefined()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • compose()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
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:

En HapticFeedbackConstants:

  • 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.

Prensa y comunicados

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.

Tecnología táctil enriquecida

Figura 4: Tecnología háptica enriquecida con textura que se desliza

Arrastrar y deslizar

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

  1. 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.
  2. Usa VibrationEffect.createWaveform(timings[], amplitudes[], int repeat).

  3. Ajusta la serie de timings[] y amplitudes[] para generar la curva de atenuación, como se muestra en la Figura 6.

Vibración larga

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.

Audio Couple

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 o SoundPool.

    • 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 con MediaPlayer y SoundPool.
  • 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

  • Cambia AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) a false 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.
  • El HAL del vibrador debe implementar la compatibilidad con el control externo.

Táctil vinculado con audio

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.

Arquitectura del generador táctil

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.

  1. 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í.

  2. 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í.

  3. 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í.

  4. 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í.

  5. 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.

  6. 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.