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.
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 |
|
Antes de 2016 |
|
2017 (Android 8) | |
|
Android 11 | |
Visualização android |
|
Antes de 2016 |
Vibrador |
|
Antes de 2016 |
|
2017 (Android 8) | |
|
Android 11 | |
android.os.VibrationEffect |
|
2017 (Android 8) |
|
Android 10 | |
android.os.VibrationEffect.Composition |
|
Android 11 |
android.media.AudioAttributes.Builder |
|
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.
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.
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.
Figura 4. Retorno tátil avançado com textura deslizante
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
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.
- O resultado precisa ser
Usar
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
Ajuste a série de
timings[]
eamplitudes[]
para gerar o curva simplificada, como mostrado na Figura 6.
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.
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
ouSoundPool
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 comMediaPlayer
eSoundPool
.
- Recursos no formato OGG com uma chave de metadados especial
(
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
- Usar um perfil de saída com canal de retorno tátil
Mudar
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
parafalse
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.
- Por padrão, o retorno tátil é desativado (
A HAL de vibração precisa implementar compatibilidade com controles externos.
- Para implementações de HIDL, use
setExternalControl(bool enabled) generates (Status status)
. - Para implementações da AIDL, use
void setExternalControl(in boolean enabled)
.
- Para implementações de HIDL, use
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.
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.
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.
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.
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.
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.
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.
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.