Implementa costanti e primitive

Le costanti e le primitive aptiche sono definite dall'HAL del vibratore e mappate dal framework Android alle API pubbliche. Esegui questi controlli per determinare se il tuo dispositivo soddisfa i requisiti minimi per implementare la tecnologia aptica:

Diagramma di flusso del processo di implementazione
della tecnologia aptica

Figura 2. Implementazione degli effetti

Diagramma di flusso dei passaggi per l'implementazione
delle primitive

Figura 3. Implementare i primitivi

Implementare costanti

Le costanti aptiche in VibrationEffect possono essere utilizzate dagli sviluppatori tramite VibrationEffect.createPredefined(). Controlla lo stato di implementazione delle seguenti costanti aptiche.

Costanti aptiche Località e riepiloghi
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect classe
Le costanti aptiche in VibrationEffect non includono alcun concetto di eventi di input e non hanno elementi dell'interfaccia utente. Le costanti includono invece la nozione di livelli di energia, come EFFECT_CLICK e EFFECT_HEAVY_CLICK, che vengono chiamati da createPredefined().

Le vibrazioni alternative descritte di seguito vengono eseguite su dispositivi che non implementano le costanti VibrationEffect. Ti consigliamo di aggiornare queste configurazioni per ottenere prestazioni ottimali su questi dispositivi.

  • EFFECT_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e le tempistiche configurate in frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e le tempistiche configurate in frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e le tempistiche (0, 30, 100, 30).

  • EFFECT_TICK

    Vibrazione della forma d'onda creata con VibrationEffect.createWaveform e le tempistiche configurate in frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Diagramma di flusso dei passaggi per testare il feedback
aptico

Figura 4. Implementare le costanti di feedback

Le costanti aptiche in HapticFeedbackConstants possono essere utilizzate dagli sviluppatori tramite View.performHapticFeedback(). Controlla lo stato delle seguenti costanti di feedback pubblico.

Costanti aptiche Località e riepiloghi
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END Classe HapticFeedbackConstants
Costanti aptiche in HapticFeedbackConstants assist input events con determinati elementi UI, come KEYBOARD_PRESS e KEYBOARD_RELEASE, chiamati da performHapticFeedback().

Implementare i primitivi

Le primitive aptiche in VibrationEffect.Composition hanno un'intensità scalabile che gli sviluppatori possono utilizzare tramite addPrimitive(int primitiveId, float scale, int delay). Le primitive possono essere suddivise in due categorie:

  • Primitive brevi:primitive di breve durata, in genere inferiore a 20 ms. Si tratta di CLICK, TICK e LOW_TICK.

  • Primitive di cinguettio:primitive con ampiezza e frequenza variabili, di solito con una durata maggiore rispetto alle primitive brevi. Questi sono SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD e SPIN.

Primitive degli Short

Le primitive brevi possono essere descritte dal profilo di accelerazione dell'output del motore del vibratore. La frequenza assoluta utilizzata varia per ogni primitiva, a seconda della frequenza di risonanza dell'attuatore. Per ulteriori informazioni sulla configurazione dell'hardware e sugli strumenti per misurare l'output, consulta Configurare l'apparecchiatura di test.

Una metrica di qualità preziosa per le vibrazioni brevi è il rapporto tra impulsi e squilli (PRR), mostrato nella Figura 5. Il PRR è definito come il rapporto tra l'impulso principale, definito dal segnale all'interno della finestra di durata in cui l'ampiezza diminuisce fino al 10% dell'ampiezza di picco, e l'impulso di squillo, definito dal segnale in cui l'ampiezza diminuisce dal 10% dell'ampiezza di picco a meno dell'1% dell'ampiezza di picco. La formula per il PRR è:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Per ulteriori informazioni sul PRR, vedi Analizzare la forma d'onda e, per ulteriori informazioni sull'analisi e il confronto dei risultati, vedi Confrontare i risultati utilizzando la mappa del rendimento.

Rapporto tra impulsi e squilli

Figura 5. Definizione del rapporto tra impulsi e squilli

Applica primitive brevi come feedback di input dell'utente o riprodotte in composizioni più lunghe per creare texture morbide. Ciò significa che di solito vengono attivati di frequente e riprodotti in rapida successione. L'intensità percepita di una singola primitiva breve può aumentare l'intensità dell'effetto più grande. Per questo motivo, calibra una singola tacca o una tacca primitiva bassa con una composizione più grande, ad esempio 100 tacche consecutive.

Primitiva di clic

L'effetto di clic è un effetto forte e nitido che di solito opera vicino alla frequenza di risonanza di un dispositivo per raggiungere la massima potenza in un breve periodo di tempo. È più forte e profondo degli altri primitivi, con un'intensità massima.

Se disponibile, utilizza la sovraalimentazione del motore all'inizio e la frenata attiva alla fine per ottenere un breve tempo di salita e discesa del motore. Per alcuni motori, l'utilizzo di un'onda quadra anziché sinusoidale può consentire un'accelerazione più rapida. La figura 6 mostra un esempio di profilo di accelerazione dell'output per il componente clic:

Fai clic sul profilo di accelerazione dell'output del componente

Figura 6. Esempio di profilo di accelerazione dell'output per la primitiva di clic

Parametro Linea guida
Durata

Target: 12 ms

Limite: < 30 ms

Accelerazione della potenza di picco

Target: 2 G

Limite: > 1 G

Frequenza All'incirca alla frequenza di risonanza

Primitiva di segno di spunta (segno di spunta leggero)

Il tick è un effetto breve e netto che di solito opera in una gamma di frequenza più elevata. Questa primitiva può anche essere descritta come un clic di media intensità a una frequenza più elevata con una coda breve. Le stesse indicazioni si applicano per ottenere un tempo di salita breve utilizzando l'overdrive del motore o un'onda quadra per l'inizio iniziale e la frenata attiva all'offset. La Figura 7 mostra un esempio di output del profilo di accelerazione per la primitiva di segno di spunta:

Profilo di accelerazione dell&#39;output del componente primitivo di tick

Figura 7. Esempio di profilo di accelerazione dell'output per la primitiva di segno di spunta

Parametro Linea guida
Durata

Target: 5 ms

Limite: < 20 ms

Accelerazione della potenza di picco

Target: metà di CLICK, 1 G

Limite: tra 0,5 G e 1 G

Frequenza

Target: 2x frequenza di risonanza

Limite: < 500 Hz

Primitiva di segno di spunta basso

Il primitivo di vibrazione leggera è una versione più morbida e debole di una vibrazione leggera, che opera a una gamma di frequenza inferiore per dare più corpo all'effetto. Questa primitiva può anche essere descritta come un clic di media intensità a una frequenza inferiore, destinato a essere utilizzato ripetutamente per un feedback dinamico. Le stesse indicazioni valgono per ottenere un tempo di salita breve utilizzando la sovraeccitazione del motore o un'onda quadra per l'inizio iniziale. La Figura 8 mostra un esempio di profilo di accelerazione dell'output per la primitiva low tick:

Profilo di accelerazione dell&#39;output primitivo con tick basso

Figura 8. Esempio di profilo di accelerazione dell'output per una primitiva a bassa risoluzione

Parametro Linea guida
Durata

Target: 12 ms

Limite: < 30 ms

Accelerazione della potenza di picco

Target: 1/4 di TICK, 0,25 G

Limite: tra 0,2 G e 0,5 G

Frequenza

Target: 2/3 della frequenza di risonanza

Limite: < 100 Hz

Primitive di Chirp

Le primitive di cinguettio possono essere descritte dai segnali di input per il livello di tensione e la frequenza di vibrazione. L'accelerazione che il motore è in grado di produrre a diverse gamme di frequenza varia a seconda della curva di risposta in frequenza dell'attuatore. Gli intervalli di frequenza e i livelli di tensione devono essere regolati in base al dispositivo.

Primitiva di aumento lento

L'aumento lento è una scansione lenta dell'ampiezza e della frequenza verso l'alto con un inizio graduale e un'intensità di vibrazione in costante aumento durante la scansione. Può essere implementato con una scansione coerente sia dell'ampiezza che della frequenza, utilizzando una gamma di frequenza inferiore che funziona al di fuori della risonanza. La Figura 9 mostra i parametri di input e un profilo di accelerazione dell'output di esempio per questa implementazione. La linea rossa corrisponde alle etichette di ampiezza a sinistra e rappresenta la variazione dell'ampiezza della vibrazione nel tempo. La linea blu corrisponde alle etichette di frequenza a destra e rappresenta la variazione della frequenza di vibrazione nel tempo.

Parametri di input e profilo di accelerazione dell&#39;output per la primitiva di salita lenta

Figura 9. Parametri di input ed esempio di profilo di accelerazione dell'output per la primitiva di salita lenta

Se la risposta in frequenza del motore è limitata (non abbastanza forte al di fuori della sua frequenza di risonanza), un'implementazione alternativa è una scansione sinusoidale da 1/2x a 1x la frequenza di risonanza. La risonanza del motore contribuisce a raggiungere il picco del segnale alla fine.

Parametro Linea guida
Durata

Target: 500 ms

Tolleranza: 20 ms

Accelerazione della potenza di picco

Target: 0,5 G

Limite: tra 0,5 G e 1 G

Frequenza

Target: da 1/2 a 2/3 della frequenza di risonanza

Alternativa: da 1/2 alla frequenza di risonanza

Primitiva di aumento rapido

L'aumento rapido è una scansione più veloce dell'ampiezza e della frequenza verso l'alto con un inizio graduale e un'intensità di vibrazione in costante aumento durante la scansione. I target di accelerazione e frequenza di vibrazione dell'output devono essere gli stessi della primitiva di aumento lento, ottenuti in un periodo di tempo più breve. La Figura 10 mostra i parametri di input della vibrazione e un profilo di accelerazione di output di esempio per la primitiva di aumento lento. La linea rossa corrisponde alle etichette di ampiezza a sinistra e rappresenta la variazione dell'ampiezza della vibrazione nel tempo. La linea blu corrisponde alle etichette di frequenza a destra e rappresenta la variazione della frequenza di vibrazione nel tempo.

Parametri di input e profilo di accelerazione dell&#39;output per la primitiva di salita rapida

Figura 10. Parametri di input ed esempio di profilo di accelerazione dell'output per la primitiva di salita rapida

Parametro Linea guida
Durata

Target: 150 ms

Tolleranza: 20 ms

Accelerazione della potenza di picco

Target: uguale a SLOW_RISE

Limite: uguale a SLOW_RISE

Frequenza

Target: uguale a SLOW_RISE

Alternativa: uguale a SLOW_RISE

Primitiva di caduta rapida

La caduta rapida è una variazione rapida di ampiezza e frequenza verso il basso con un inizio morbido. Puoi utilizzare una frequenza più elevata come punto di partenza mentre il motore aumenta gradualmente la velocità per raggiungere l'accelerazione di picco. La frequenza deve diminuire costantemente durante la scansione, anche durante il tempo di salita. La Figura 11 mostra i parametri di input e un profilo di accelerazione dell'output di esempio per questa implementazione. La linea rossa corrisponde alle etichette di ampiezza a sinistra e rappresenta la variazione dell'ampiezza della vibrazione nel tempo. La linea blu corrisponde alle etichette di frequenza a destra e rappresenta la variazione della frequenza di vibrazione nel tempo.

Parametri di input e profilo di accelerazione dell&#39;output per la primitiva di caduta rapida

Figura 11. Parametri di input ed esempio di profilo di accelerazione dell'output per la primitiva di caduta rapida

Parametro Linea guida
Durata

Target: 100 ms

Tolleranza: 20 ms

Accelerazione della potenza di picco

Target: 1 G

Limite: tra 0,5 G e 2 G

Frequenza

Target: da 2 a 1 volta la frequenza di risonanza

Primitiva di rumore sordo

Il suono sordo è un effetto percussivo, basso e cupo che simula la sensazione fisica di bussare su legno cavo. Questa primitiva opera in un intervallo di bassa frequenza, simile alla primitiva low tick, per dare più corpo all'effetto. Puoi implementare la primitiva del tonfo come sweep verso il basso di ampiezza e frequenza in un intervallo di frequenza inferiore (preferibilmente inferiore a 100 Hz). La Figura 12 mostra i parametri di input e un profilo di accelerazione dell'output di esempio per questa implementazione. La linea rossa corrisponde alle etichette di ampiezza a sinistra e rappresenta la variazione dell'ampiezza della vibrazione nel tempo. La linea blu corrisponde alle etichette di frequenza a destra e rappresenta la variazione della frequenza di vibrazione nel tempo.

Parametri di input e profilo di accelerazione dell&#39;output per la primitiva Thud

Figura 12. Parametri di input ed esempio di profilo di accelerazione dell'output per la primitiva Thud

Se la risposta in frequenza del motore è limitata, un'implementazione alternativa consiste nell'iniziare con un segnale di pilotaggio a piena intensità alla frequenza di risonanza e scendere alla frequenza più bassa possibile che possa ancora essere percepita. Questo approccio potrebbe richiedere un aumento dell'intensità del segnale di azionamento alla frequenza più bassa per percepire la vibrazione.

Parametro Linea guida
Durata

Target: 300 ms

Tolleranza: 20 ms

Accelerazione della potenza di picco

Target: 0,25 G

Limite: tra 0,2 G e 0,5 G

Frequenza

Target: da 1/2 a 1/3 della frequenza di risonanza

Alternativa: da 1x a 1/2 della frequenza di risonanza

Primitiva di rotazione

La rotazione simula un movimento rotatorio rapido verso l'alto e verso il basso con una leggera accentuazione al centro. La rotazione può essere implementata variando l'ampiezza e la frequenza in modo indipendente, in direzioni opposte e seguita dal movimento inverso. È importante utilizzare una gamma di frequenza inferiore (preferibilmente inferiore a 100 Hz). La Figura 13 mostra i parametri di input e un profilo di accelerazione di esempio per questa implementazione. La linea rossa corrisponde alle etichette di ampiezza a sinistra e rappresenta la variazione dell'ampiezza della vibrazione nel tempo. La linea blu corrisponde alle etichette di frequenza a destra e rappresenta la variazione della frequenza di vibrazione nel tempo.

Consigliamo di chiamare la primitiva di rotazione due volte di seguito o tre volte nelle composizioni per ottenere una sensazione di rotazione e instabilità.

Se la risposta in frequenza del motore è limitata, un'implementazione alternativa consiste nell'eseguire una scansione sinusoidale rapida da 1/2x a 1x la frequenza di risonanza e viceversa. La risonanza del motore dà automaticamente un accento al segnale al centro.

Parametri di input e profilo di accelerazione dell&#39;output per il componente primitivo di rotazione

Figura 13. Parametri di input ed esempio di profilo di accelerazione dell'output per la primitiva di rotazione

Parametro Linea guida
Durata

Target: 150 ms

Tolleranza: 20 ms

Accelerazione della potenza di picco

Target: 0,5 G

Limite: tra 0,25 G e 0,75 G

Frequenza

Target: da 2/3 a 1/3, poi di nuovo a 1/2 della frequenza di risonanza

Alternativa: da 2/3 a 1x, poi di nuovo a 1/2 della frequenza di risonanza