Base de UX para framework tátil

Todas as melhorias do framework do Android criadas com base no retorno tátil são impulsionadas pela um conjunto de princípios de UX que estão evoluindo no mesmo ritmo. O estado atual envolvem a substituição da vibração movimentada por um retorno tátil claro e explorar o retorno tátil avançado.

Princípios da UX

Figura 1. Princípios atuais

A tabela a seguir lista todas as APIs de retorno tátil disponíveis.

API Métodos Ano adicionado
android.view.HapticFeedbackConstants
  • CLIQUE CONTEXTO
  • CLOCK_TICK
  • CHAVE_VIRTUAL
  • TOQUE_DO_TECLADO
  • LONG_PRESS
Antes de 2016
  • KEYBOARD_PRESS
  • RELAÇÃO_DO_TECLADO
  • MOVIMENTAÇÃO_DE_TEXTO
  • LANÇAMENTO_DA_CHAVE_VIRTUAL
2017 (Android 8)
  • CONFIRMAR
  • RECUSAR
  • GESTURE_INÍCIO
  • GESTURE_END
Android 11
Visualização android
  • performHapticFeedback()
Antes de 2016
Vibrador
  • vibra()
  • hasVibrator()
Antes de 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivessupported()
  • areEffectssupported()
  • arePrimitivessupported()
Android 11
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • ECOGURANÇA
  • CLIQUE_EFEITO
  • CLIQUE_DE_PELO_EFEITO
  • CLIQUE_DO_DUPLICADO
  • createPredefinido()
Android 10
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • compose()
Android 11
android.media.AudioAttributes.Builder
  • setHapticChannels muted().
Android 10

Vibração movimentada

Voltando a pagers e telefones básicos, ERM de baixa qualidade, mas eficiente em termos de energia vibrações baseadas em campainhas têm sido usadas como um substituto do toque auditivo modo silencioso. os componentes de hardware legados que produzem volume alto e desagradável ruídos audíveis podem prejudicar o retorno tátil ao gerar impressões de baixa qualidade (por exemplo, um telefone barato e quebrado).

Retorno tátil claro

O retorno tátil claro é compatível com a sensação de mudanças de estado discretas (por exemplo, mudanças binárias durante o processo de ligar/desligar). Devido à natureza funcionalidade discreta, retorno tátil claro são gerados como uma única entidade (por exemplo, um efeito tátil por evento de entrada).

O objetivo do Android é fornecer retorno tátil claro, com sensações fortes, mas afiadas, em vez do que as sensações.

Constantes táteis predefinidas criadas para oferecer suporte ao retorno tátil claro incluem: o seguinte.

Nas 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

Nas VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Criar um conhecimento comum entre fabricantes de dispositivos e desenvolvedores é fundamental para aumentando a qualidade geral do retorno tátil no ecossistema Android. Use o lista de verificação básica, avaliação de hardware, e CDD. para saber mais sobre a implementação do retorno tátil.

Imprensa e comunicado

Figura 3. Pressionar e soltar.

Retorno tátil avançado

Retorno tátil avançado é uma categoria em crescimento que vai além de uma única efeitos baseados em impulsos. O objetivo do Android é oferecer suporte ao retorno tátil avançado composição e ajuste com um bom nível de granularidade. O seguinte têm suporte no Android 11 ou versões anteriores.

Retorno tátil avançado

Figura 4. Retorno tátil avançado com textura deslizante

Arrastar e deslizar

Figura 5. Arrastar e deslizar

Caso de uso 1: textura deslizante

Se o efeito tátil se repetir enquanto o dedo desliza sobre uma superfície sensível ao toque (por exemplo, arrastar, deslizar, explorar a superfície com uma textura tátil fantasma), os efeitos táteis repetidos são, de preferência, nítidos e sutis.

Se o efeito individual for movimentado em vez de nítido, os intervalos entre as repetições provavelmente serão apagadas. O resultado é uma conversa longa, do que vários sinais discretos.

Se a amplitude não for sutil o suficiente, a energia tátil percebida aumenta pela repetição, resultando em um retorno tátil extremamente forte no final do a repetição.

Implementar uma textura tátil de superfície simples para gestos de deslizar e arrastar

Usar CLOCK_TICK e TEXT_HANDLE_MOVE em HapticFeedbackConstants. Essas constantes predefinem características de repetição e amplitude.

Criar seu próprio efeito

Para criar seu próprio efeito, crie um design unindo sequências de PRIMITIVE_CLICK e PRIMITIVE_TICK pol. VibrationEffect.Composition. Você pode ajustar as características da escala de repetição e amplitude usando addPrimitive(int primitiveID, float scale, int delay). O suporte depende de as CAP_COMPOSE_EFFECTS capacidade do Interface HAL de vibração.

Caso de uso 2: vibração longa com efeito simplificada

A vibração longa é uma vibração suave de amplitude que passa do 0 para o amplitude desejada. A vibração longa pode gerar atenção fácil de ser percebida retorno tátil. No entanto, uma vibração longa e súbita pode assustar os usuários em um ambiente silencioso e costuma produzir zumbidos audíveis. Para gerar uma vibrações longas e positivas, aplique o efeito brand-in no início da faixa longa vibração. Isso produz uma transição de amplitude suave que é construída em direção ao amplitude desejada.

Aplicar o efeito relaxante

  1. Verifique as capacidades de hardware do controle de amplitude com o android.os.Vibrator.hasAmplitudeControl()

    • O resultado precisa ser true para produzir o efeito light-in com amplitude variável.
  2. Usar VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)

  3. Ajuste a série de timings[] e amplitudes[] para gerar o curva simplificada, como mostrado na Figura 6.

Vibração longa

Figura 6. Longa curva de easing para vibração

Caso de uso 3: retorno tátil acoplado a áudio

Retorno tátil acoplado a áudio são padrões táteis acoplados ao ritmo do áudio para chamar a atenção do usuário.

Funcionalidade tátil acoplada a áudio: benefícios

Para implementar o retorno tátil acoplado a áudio, combine o retorno tátil claro com vibrações longas. As sensações táteis fortes, mas curtas, do retorno tátil claro oferecem padrões rítmicos. Quando combinado com os altos níveis de estímulos por muito tempo, a vibração do usuário faz um ótimo trabalho ao chamar a atenção do usuário.

É importante considerar os padrões rítmicos das sensações. Se não faz sentido de ritmo, o usuário percebe as sensações táteis como zumbidos aleatórios e tende a para ignorá-los.

Casal de áudio

Figura 7. Exemplo de retorno tátil de casal de áudio

Funcionalidade tátil acoplada a áudio: dicas para implementar

Implementar o retorno tátil acoplado a áudio exige uma compreensão básica do conteúdo reprodução de canais de áudio e retorno tátil. Lembre-se do seguinte.

  • Usar o MediaPlayer ou SoundPool classes.

    • Recursos no formato OGG com uma chave de metadados especial (ANDROID_HAPTIC seguido por vários canais táteis) indicam o presença de dados de retorno tátil e reprodução com MediaPlayer e SoundPool.
  • Indicar se há compatibilidade com retorno tátil e reprodução de áudio em audio_policy_configuration.xml:

    • Usar um perfil de saída com canal de retorno tátil AUDIO_CHANNEL_OUT_HAPTIC_A|B:
    • Para um stream de saída com canais táteis, lembre-se de que o retorno tátil são apresentados como canais extras nos dados.

    Exemplo

    Se a máscara de canal do stream de saída for assim:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Então cada amostra deve ficar assim:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Mudar AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) para false para reproduzir o canal tátil.

    • Por padrão, o retorno tátil é desativado (true).
    • Os casos de uso incluem toques e sons de interface com sincronização retorno tátil e retorno.
  • A HAL de vibração precisa implementar compatibilidade com controles externos.

Funcionalidade tátil acoplada por áudio

Figura 8. Como implementar o retorno tátil acoplado a áudio

Funcionalidade tátil acoplada a áudio: gerador tátil

HapticGenerator é um efeito de áudio introduzido no Android 12, que pode gerar dados táteis de um canal de áudio e reproduzi-los em tempo real como retorno tátil acoplado a áudio. O efeito é aplicado ao AudioTrack. conforme descrito na figura 9.

Arquitetura de gerador tátil

Figura 9. Arquitetura de gerador tátil

Para garantir que seu algoritmo gere também retorno tátil de alta qualidade, sintonize o algoritmo de geração no motor de vibração do dispositivo ajustando o parâmetros que configuram a cadeia de filtros aplicados a ondas de áudio. Esta seção descreve esses parâmetros em detalhes e explica como ajustá-los à especificação de hardware.

  1. Frequência de ressonância para o filtro de passagem de banda

    A frequência ressonante do vibrador é a frequência em que um atuador tátil tem saída máxima. Este parâmetro ajusta um antirressonador para a função de transferência de resposta, a fim de obter uma largura de banda maior. O framework do Android vincula automaticamente esse valor à saída do Método HAL de vibração IVibrator.getResonantFrequency.

    O valor padrão para este parâmetro é 150 Hz. Isso pode ser modificado na aqui.

  2. Potência de normalização para envelope lento

    Esse parâmetro determina o expoente na normalização parcial (controle de ganho automático). O valor padrão é -0.8, o que significa que 80% da variação do intervalo dinâmico é removida por essa etapa de controle de ganho. Isso pode ser modificado no código aqui.

  3. Fator Q para filtro de interrupção de banda

    O fator de qualidade da vibração (fator Q) é determinado por dois parâmetros:

    • O Zero Q, o fator de qualidade dos zeros no filtro band-stop que cancela parcialmente a ressonância.

    • O Pole Q, o fator de qualidade dos polos no filtro band-stop.

    A razão entre esses dois valores limita a supressão de ressonância para para aumentar as frequências mais baixas e ampliar a resposta do algoritmo. Por exemplo: os valores padrão de 8 para Zero Q e 4 para o Pole Q produz uma proporção de 2, limitando a supressão de ressonância por um fator de 2 (6 dB). O framework do Android vincula os dois valores à saída da HAL de vibração. método IVibrator.getQFactor.

    Se os valores padrão não levarem em conta a amortecimento da força do motor em seu dispositivo, recomendamos modificar ambos os valores ao mesmo tempo, e aumentando ou diminuindo ambos. A proporção de zero Q para o Pole Q precisa ser maior que 1. Isso pode ser modificado no código aqui.

  4. Frequência dos cantos para distorção

    A frequência de canto é aplicada por um filtro passa-baixo que suprime vibração de baixo nível e aumenta níveis mais altos usando uma distorção cúbica. O padrão é 300 Hz. Isso pode ser modificado no código aqui.

  5. Ganho de entrada e limite de cubo para distorção

    Esses parâmetros são usados por um filtro de distorção não linear aplicado ao forma de onda de entrada que atenua a amplitude dos sinais de menor frequência aumenta os de maior frequência.

    • O valor padrão do fator de ganho de entrada é 0.3.
    • O valor padrão para o limite do cubo é 0.1.

    Recomendamos modificar os dois valores juntos. Elas podem ser encontradas no código aqui.

    Para mais informações sobre a função aplicada por esse filtro, consulte o de implementação disponível aqui. Para saber mais sobre como esses dois parâmetros influenciam o resultado, recomendamos plotar as respostas de frequência dos filtros e observar como as respostas de frequência mudam com valores de parâmetros diferentes.

  6. Ganho de saída para distorção

    Controla a amplitude final de vibração. É um ganho final aplicado após um limitador flexível que limita as amplitudes de vibração a menos de 1. O valor padrão é 1.5 e pode ser modificado no código aqui. Se a vibração for muito sutil, aumente o valor. Se você ouvir o barulho do hardware do atuador, diminua o valor.