Le costanti e le primitive di aptica 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 l'implementazione dell'aptica:
Figura 2. Implementare gli effetti
Figura 3. Implementazione di primitive
Implementa le costanti
Le costanti aptica in VibrationEffect possono essere utilizzate dagli sviluppatori tramite VibrationEffect.createPredefined(). Controlla lo stato di implementazione delle seguenti costanti aptica.
Costanti aptica | Sedi e riepiloghi |
---|---|
EFFECT_TICK , EFFECT_CLICK ,
EFFECT_HEAVY_CLICK ,
EFFECT_DOUBLE_CLICK |
La
VibrationEffect
classcostanti di aptica in VibrationEffect non includono alcuna
nozione di eventi di input e non hanno elementi dell'interfaccia utente. Le costanti includono invece la nozione di livelli energetici, come EFFECT_CLICK e EFFECT_HEAVY_CLICK , che vengono chiamati da
createPredefined() . |
Le vibrazioni alternative descritte di seguito vengono eseguite sui dispositivi che non implementano le costanti VibrationEffect
. Ti consigliamo di aggiornare queste configurazioni per ottenere il massimo rendimento su questi dispositivi.
EFFECT_CLICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e i tempi configurati inframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Vibrazione della forma d'onda creata con
VibrationEffect.createWaveform
e i tempi configurati inframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Vibrazione con 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 i tempi configurati inframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Figura 4. Implementazione delle costanti di feedback
Le costanti di feedback aptico in HapticFeedbackConstants possono essere utilizzate dagli sviluppatori tramite View.performHapticFeedback(). Controlla lo stato delle seguenti costanti di feedback pubblico.
Costanti aptica | Sedi 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 |
La classe HapticFeedbackConstants Le costanti aptica in HapticFeedbackConstants assistono gli eventi di input
con determinati elementi dell'interfaccia utente, come KEYBOARD_PRESS e
KEYBOARD_RELEASE , che vengono chiamati da
performHapticFeedback() . |
Implementare le primitive
Le primitive aptica 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:
Primitivi brevi:primitivi con durata breve, in genere inferiore a 20 ms. Si tratta di
CLICK
,TICK
eLOW_TICK
.Primitivi chirp:primitivi con ampiezza e frequenza variabili, solitamente con una durata maggiore rispetto ai primitivi brevi. Si tratta di
SLOW_RISE
,QUICK_RISE
,QUCK_FALL
,THUD
eSPIN
.
Elementi primitivi di Short
Le primitive brevi possono essere descritte dal profilo di accelerazione dell'uscita del motore del vibratore. La frequenza assoluta utilizzata varia per ogni elemento primitivo, a seconda della frequenza di risonanza dell'attuatore. Per ulteriori informazioni sulla configurazione dell'hardware e sugli strumenti per la misurazione dell'output, consulta Configurare l'apparecchiatura di test.
Una metrica di qualità utile per le vibrazioni brevi è il rapporto tra impulsi e anelli (PRR), riportato 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 al 10% dell'ampiezza di picco, e l'impulso anulare, 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 è:
Per ulteriori informazioni sul PRR, consulta Analizzare l'onda sinusoidale e per ulteriori informazioni su come analizzare e confrontare i risultati, consulta Confrontare i risultati utilizzando la mappa del rendimento.
Figura 5. Definizione del rapporto tra impulsi e anelli
Applica primitive brevi come feedback sull'input dell'utente o riproducile in composizioni più lunghe per creare texture morbide. Ciò significa che in genere vengono attivati frequentemente 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 un singolo tick o una primitiva con pochi tick con una composizione più grande, ad esempio 100 tick consecutivi.
Primitive di clic
La primitiva click è un effetto forte e nitido che in genere opera vicino alla frequenza di risonanza di un dispositivo per raggiungere l'uscita massima in breve tempo. È più forte e profondo rispetto alle altre primitive e funziona a massima intensità.
Se disponibile, utilizza l'overdrive del motore all'inizio e la frenata attiva alla fine per ottenere un tempo di salita e discesa del motore breve. Per alcuni motori, l'utilizzo di un'onda quadra anziché sinusoidale può consentire un'accelerazione più rapida. La figura 6 mostra un profilo di accelerazione dell'output di esempio per la primitiva clic:
Figura 6. Esempio di profilo di accelerazione dell'output per la primitiva di clic
Parametro | Linea guida |
---|---|
Durata |
Obiettivo: 12 ms Limite: < 30 ms |
Accelerazione massima in uscita |
Target: 2 G Limite: > 1 G |
Frequenza | Approssimativamente alla frequenza di risonanza |
Primitive di spunta (spunta leggera)
L'elemento tick è un effetto breve e netto che in genere opera a una gamma di frequenza più elevata. Questa primitiva può essere descritta anche come un clic di media intensità a una frequenza più elevata con una coda corta. Le stesse indicazioni valgono 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 profilo di accelerazione dell'output per la primitiva tick:
Figura 7. Esempio di profilo di accelerazione dell'output per la primitiva tick
Parametro | Linea guida |
---|---|
Durata |
Target: 5 ms Limite: < 20 ms |
Accelerazione massima in uscita |
Target: metà di Limite: tra 0,5 G e 1 G |
Frequenza |
Target: 2 volte la frequenza di risonanza Limite: < 500 Hz |
Primitiva di tick basso
L'elemento di base tick basso è una versione più morbida e debole di un tick chiaro, che opera a un intervallo di frequenza inferiore per dare più corpo all'effetto. Questa primitiva può essere anche descritta come un clic di intensità media a una frequenza inferiore, destinato a essere utilizzato ripetutamente per il feedback dinamico. Le stesse indicazioni valgono per ottenere un tempo di salita breve utilizzando l'overdrive 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:
Figura 8. Esempio di profilo di accelerazione in uscita per primitive con tick basso
Parametro | Linea guida |
---|---|
Durata |
Obiettivo: 12 ms Limite: < 30 ms |
Accelerazione massima in uscita |
Target: 1/4 di Limite: tra 0,2 G e 0,5 G |
Frequenza |
Target: 2/3 della frequenza di risonanza Limite: < 100 Hz |
Primitive Chirp
Le primitive Chirp 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 in diversi intervalli di frequenza varia in base alla curva di risposta in frequenza dell'attuatore. Gli intervalli di frequenza e i livelli di tensione devono essere regolati su ciascun dispositivo.
Primitive aumento lento
L'aumento lento è un'ampiezza e una frequenza lenta verso l'alto con un inizio graduale e un'intensità di vibrazione in aumento costante durante la scansione. Può essere implementato tramite una scansione coerente sia dell'ampiezza che della frequenza, utilizzando un intervallo di frequenza inferiore che opera al di fuori della risonanza. La Figura 9 mostra i parametri di input e un esempio di profilo di accelerazione dell'output 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 sulla destra e rappresenta la variazione della frequenza di vibrazione nel tempo.
Figura 9. Parametri di input ed esempio di profilo di accelerazione in uscita per la primitiva di aumento lento
Se la risposta in frequenza del motore è limitata (non è sufficientemente lontana dalla frequenza di risonanza), un'implementazione alternativa è un sweep sinusoidale da 1/2x a 1x la frequenza di risonanza. La risonanza del motore contribuisce al raggiungimento del picco del segnale alla fine.
Parametro | Linea guida |
---|---|
Durata |
Target: 500 ms Tolleranza: 20 ms |
Accelerazione massima in uscita |
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: 1/2 alla frequenza di risonanza |
Primitive di aumento rapido
L'aumento rapido è uno sweep di frequenza e ampiezza verso l'alto più rapido con inizio graduale e un'intensità di vibrazione in aumento costante durante lo sweep. I target di frequenza di vibrazione e accelerazione in uscita devono essere gli stessi della primitiva di aumento lento, raggiunti in una durata più breve. La Figura 10 mostra i parametri di input della vibrazione e un esempio di profilo di accelerazione in uscita 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 sulla destra e rappresenta la variazione della frequenza di vibrazione nel tempo.
Figura 10. Parametri di input ed esempio di profilo di accelerazione in uscita per la primitiva di aumento rapido
Parametro | Linea guida |
---|---|
Durata |
Target: 150 ms Tolleranza: 20 ms |
Accelerazione massima in uscita |
Target: uguale a Limite: come |
Frequenza |
Target: uguale a Alternativa: uguale a |
Primitiva caduta rapida
La caduta rapida è una scansione verso il basso rapida di ampiezza e frequenza con un inizio graduale. Puoi utilizzare una frequenza più elevata come punto di partenza mentre il motore accelera per raggiungere l'accelerazione massima in uscita. La frequenza deve diminuire in modo costante durante la scansione, anche durante il tempo di salita. La Figura 11 mostra i parametri di input e un esempio di profilo di accelerazione dell'output 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 sulla destra e rappresenta la variazione della frequenza di vibrazione nel tempo.
Figura 11. Parametri di input ed esempio di profilo di accelerazione in uscita per la primitiva caduta rapida
Parametro | Linea guida |
---|---|
Durata |
Target: 100 ms Tolleranza: 20 ms |
Accelerazione massima in uscita |
Target: 1 G Limite: tra 0,5 G e 2 G |
Frequenza |
Target: da 2 a 1 volte la frequenza di risonanza |
Primitiva Thud
Il thud è un effetto percussivo basso e sordo che simula la sensazione fisica di battere su legno cavo. Questa primitiva opera in un intervallo di frequenza basso, simile alla primitiva tick basso, per dare più corpo all'effetto. Puoi implementare l'elemento thud come sweep con diminuzione 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 esempio di profilo di accelerazione dell'output 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 sulla destra e rappresenta la variazione della frequenza di vibrazione nel tempo.
Figura 12. Parametri di input ed esempio di profilo di accelerazione in uscita per la primitiva thud
Se la risposta in frequenza del motore è limitata, un'implementazione alternativa è iniziare con un segnale di azionamento a piena intensità alla frequenza di risonanza e scendere alla frequenza più bassa possibile che può essere ancora percepita. Questo approccio potrebbe richiedere un aumento dell'intensità del segnale di azionamento alla frequenza inferiore per sentire la vibrazione.
Parametro | Linea guida |
---|---|
Durata |
Target: 300 ms Tolleranza: 20 ms |
Accelerazione massima in uscita |
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 1 a 1/2 della frequenza di risonanza |
Primitiva di rotazione
La rotazione simula un momento di rotazione veloce verso l'alto e verso il basso con un leggero accento al centro. La rotazione può essere implementata eseguendo la scansione dell'ampiezza e della frequenza in modo indipendente, in direzioni opposte e seguita dal movimento opposto. È importante utilizzare una gamma di frequenza più bassa (preferibilmente inferiore a 100 Hz). La Figura 13 mostra i parametri di input e un esempio di profilo di accelerazione dell'output 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 sulla 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 è eseguire un rapido sweep sinusoidale da 1/2x a 1x la frequenza di risonanza e viceversa. La risonanza del motore conferisce automaticamente al segnale un accento al centro.
Figura 13. Parametri di input ed esempio di profilo di accelerazione in uscita per la primitiva di rotazione
Parametro | Linea guida |
---|---|
Durata |
Target: 150 ms Tolleranza: 20 ms |
Accelerazione massima in uscita |
Target: 0,5 G Limite: tra 0,25 G e 0,75 G |
Frequenza |
Target: da 2/3 a 1/3 e poi di nuovo a 1/2 della frequenza di risonanza Alternativa: da 2/3 a 1x, quindi di nuovo a 1/2 della frequenza di risonanza |