Uno dei casi d'uso più basilari della tecnologia aptica è fornire feedback alle interazioni degli utenti. I selettori dell'ora, la pressione dei tasti su una tastiera virtuale e la selezione del testo sono esempi comuni di buoni casi d'uso per il feedback aptico. Per ulteriori informazioni su quando e come applicare la tecnologia aptica, leggi l'articolo sui principi di progettazione della tecnologia aptica.
In questa pagina vengono descritti tre modi per fornire feedback aptico.
- Utilizza
View
(consigliato). Questo approccio è orientato all'azione, ha il supporto più ampio e non richiede l'autorizzazioneVIBRATE
. - Utilizza un
VibrationEffect
predefinito. Questo approccio ha una maggiore flessibilità, ma prevede alcuni compromessi. - Utilizza composizioni avanzate con le primitive. Questo metodo è più recente e ancora più flessibile, ma richiede un supporto specifico per i dispositivi.
Questi metodi utilizzano primitive definite a livello di dispositivo per fornire feedback di alta qualità personalizzati per il dispositivo in uso.
Per impostazione predefinita, tutti i metodi di feedback aptico rispettano le impostazioni relative al feedback al tocco dell'utente.
Usa i componenti View
per generare feedback aptico
Utilizza il metodo View.performHapticFeedback
per generare feedback aptico. Le
costanti aptiche definite da HapticFeedbackConstants
sono incentrate sulla loro
funzionalità in un'applicazione, non sul tipo di effetto aptico applicato.
L'implementazione di base può variare a seconda delle funzionalità del dispositivo e dell'hardware, ma l'app deve considerare solo il tipo di feedback da fornire in un determinato contesto. Concentrandoti sulla funzionalità, puoi attivare il feedback aptico per interazioni simili. Gli utenti imparano ad associare nel tempo significati diversi alle diverse sensazioni aptiche.
Prerequisiti: attivare il feedback aptico
Finché la View
è visibile, il feedback aptico può essere utilizzato per i suoi eventi.
Alcuni eventi, ad esempio la pressione prolungata, hanno una tecnologia aptica predefinita che viene attivata se un
ascoltatore nella visualizzazione gestisce l'evento (restituisce true
).
Un View
di Android può disattivare il feedback aptico impostando la proprietà View.hapticFeedbackEnabled
su false
. La disattivazione di questa proprietà
genera un feedback predefinito.
Il metodo performHapticFeedback
rispetta anche l'impostazione di sistema
HAPTIC_FEEDBACK_ENABLED
, che consente all'utente di disattivarle potenzialmente
per l'intero sistema.
A differenza di altre API aptiche, l'uso di HapticFeedbackConstants
con View
non richiede l'autorizzazione VIBRATE
.
Scegli un HapticFeedbackConstant
Quando utilizzi i componenti View
con HapticFeedbackConstants
, non è necessario valutare il supporto dei dispositivi specifici, poiché queste costanti avranno un comportamento di fallback, se necessario. L'unica considerazione è il livello di SDK della costante desiderata.
Esempio 1: pressione dei tasti
Questo è un esempio di come aggiungere un feedback aptico a un input tocco in View
utilizzando i listener touch. Gli effetti simulano la sensazione di premere un pulsante
e poi rilasciarlo.
Kotlin
class HapticTouchListener : View.OnTouchListener { override fun onTouch(View view, MotionEvent event) : Boolean { when (event.actionMasked) { MotionEvent.ACTION_DOWN -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) MotionEvent.ACTION_UP -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE) } return true } }
Java
class HapticTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); break; case MotionEvent.ACTION_UP: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE); break; } return true; } }
Esempio 2: pulsante Invia
I casi d'uso del feedback aptico vanno oltre la simulazione di un'interazione fisica con il dispositivo. Potrebbero essere usati anche per trasmettere un significato astratto. Ad esempio, l'aspettativa generale di un effetto CONFIRM
è una vibrazione breve e leggera, mentre REJECT
potrebbe essere un feedback più forte per segnalare un errore. Questo è illustrato nell'esempio
di seguito per un feedback sul pulsante Invia.
Kotlin
submitButton.setOnClickListener { view -> val successful = performSubmit() if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM) } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT) } }
Java
submitButton.setOnClickListener(view -> { boolean successful = performSubmit(); if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM); } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT); } });
Utilizza un valore predefinito di VibrationEffect
per generare feedback aptico
L'approccio basato su View
si concentra sull'interazione dell'utente. È preferito per la coerenza all'interno del sistema. Tuttavia, è possibile richiamare specifiche API predefinite di
VibrationEffect
per ottenere effetti
di feedback aptico personalizzati.
Gli effetti predefiniti sono disponibili come costanti VibrationEffect
e possono essere controllati e utilizzati con il servizio Vibrator
come mostrato negli esempi seguenti.
Informazioni sul supporto delle API VibrationEffect
sui dispositivi
Nell'utilizzo di base, non dovrebbe essere necessario verificare il supporto delle singole API VibrationEffect
. API come Vibrator.areEffectsSupported
e Vibrator.areAllEffectsSupported
vengono utilizzate per determinare se il dispositivo ha
un'implementazione personalizzata della costante. Se non è presente un effetto personalizzato, la tua app può comunque riprodurli e utilizzare un'implementazione di riserva definita dalla piattaforma.
Per maggiori dettagli, vedi PredefinitoVibrationEffect
.
Prerequisiti: carica il vibratore e l'autorizzazione VIBRATE
La maggior parte delle vibrazioni può essere utilizzata con il servizio Vibrator
, che può essere caricato
come segue:
Kotlin
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Java
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
L'app deve disporre dell'autorizzazione VIBRATE
per far vibrare il dispositivo utilizzando questo servizio. È possibile aggiungere l'autorizzazione al file manifest dell'applicazione:
<uses-permission android:name="android.permission.VIBRATE"/>
Riproduci un VibrationEffect
predefinito
Gli effetti predefiniti possono essere preparati usando VibrationEffect.createPredefined
e poi riprodotti utilizzando uno dei metodi vibrate
su Vibrator
.
Questo esempio riproduce un effetto Clic.
Kotlin
val vibrator = context.getSystemService(Vibrator::class.java) ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
Java
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
Utilizzare composizioni avanzate con le primitive
L'API VibrationEffect.Composition
offre ulteriori possibilità per
il feedback aptico. Tuttavia, a differenza degli effetti, queste primitive non hanno
fallback a livello di sistema, il che significa che è necessario prestare un'attenzione particolare
alle primitive e ad altre funzionalità supportate dal dispositivo.
L'utilizzo di queste API viene discusso in maggiore dettaglio nella sezione Creazione di effetti aptici personalizzati.