Gli attuatori di vibrazione più comuni sui dispositivi Android sono gli attuatori lineari risonanti (LRA). Gli LRA simulano la sensazione di un clic sul pulsante su una superficie di vetro altrimenti non reattiva. Un segnale di feedback sul clic chiaro e distinto dura in genere tra 10 e 20 millisecondi. Questa sensazione rende le interazioni degli utenti più naturali. Per le tastiere virtuali, questo feedback sui clic può aumentare la velocità di digitazione e ridurre gli errori.
Le LRA hanno alcune frequenze di risonanza comuni:
- Alcuni LRA avevano frequenze di risonanza nell'intervallo da 200 a 300 Hz, che coincide con la frequenza alla quale la pelle umana è più sensibile alle vibrazioni. La sensazione delle vibrazioni in questa gamma di frequenza viene solitamente distinta come liscia, acuta e penetrante.
- Altri modelli di ARL hanno frequenze di risonanza inferiori, intorno a 150 Hz. La sensazione è qualitativamente più morbida e piena (in termini di dimensioni).
Data la stessa tensione di ingresso a due frequenze diverse, le ampiezze di output della vibrazione possono essere diverse. Maggiore è la distanza della frequenza dalla frequenza di risonanza dell'LRA, minore è l'ampiezza della vibrazione.
Gli effetti aptico di un determinato dispositivo utilizzano sia l'attuatore di vibrazione sia il relativo driver. I driver aptico che includono funzionalità di overdrive e frenata attiva possono ridurre il tempo di salita e il suono metallico degli LRA, garantendo una vibrazione più reattiva e chiara.
Appiattimento della forma d'onda predefinito sui dispositivi
A titolo esemplificativo, considera il comportamento di un pattern di forma d'onda personalizzato su un dispositivo generico:
Kotlin
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
I seguenti grafici mostrano l'onda di ingresso e l'accelerazione in uscita corrispondente agli snippet di codice precedenti. Tieni presente che l'accelerazione aumenta gradualmente, non improvvisamente, ogni volta che si verifica un cambiamento brusco dell'ampiezza nel pattern, ovvero a 0 ms, 150 ms, 200 ms, 250 ms e 700 ms. Inoltre, si verifica un overshoot a ogni variazione di passo dell'ampiezza ed è visibile un ringing che dura almeno 50 ms quando l'ampiezza di input scende improvvisamente a 0.
Schema aptico migliorato
Per evitare l'overshoot e ridurre il tempo di squillo, modifica le ampiezze in modo più graduale. Di seguito sono riportati i grafici dell'onda e dell'accelerazione della versione aggiornata:
Kotlin
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
Creare effetti aptico più complessi
Altri elementi di una risposta soddisfacente ai clic sono più complessi e richiedono alcune conoscenze dell'LRA utilizzato in un dispositivo. Per risultati ottimali, utilizza le forme d'onda prefabbricate e le costanti fornite dalla piattaforma del dispositivo, che ti consentono di svolgere le seguenti operazioni:
- Esegui effetti e primitive chiari.
- Concatenali per comporre nuovi effetti aptico.
Queste costanti e primitive aptica predefinite possono velocizzare notevolmente il tuo lavoro, nonché creare effetti aptica di alta qualità.