Uno dei casi d'uso più di base per la tecnologia aptica è fornire un 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 i principi di progettazione aptica.
Questa pagina descrive tre modi per fornire il feedback aptico.
- Utilizza un
View
(opzione consigliata). Questo approccio è incentrato sulle azioni, supporta un numero maggiore di dispositivi e non richiede l'autorizzazioneVIBRATE
. - Utilizza un
VibrationEffect
predefinito. Questo approccio offre una maggiore flessibilità, ma con alcuni compromessi. - Utilizza composizioni avanzate con elementi primitivi. Questo metodo è più recente e ancora più flessibile, ma richiede il supporto di dispositivi specifici.
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 del feedback tocco dell'utente.
Utilizzare i componenti View
per generare il feedback aptico
Utilizza il metodo View.performHapticFeedback
per generare il feedback aptico. Le costanti di aptica definite da HapticFeedbackConstants
si concentrano sulla loro funzionalità in un'applicazione, non sul tipo di effetto aptico eseguito.
L'implementazione sottostante potrebbe 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. Se ti concentri sulla funzionalità, puoi attivare il feedback aptico per interazioni simili. Gli utenti imparano ad associare significati diversi a diverse sensazioni tattili nel tempo.
Prerequisiti: attiva il feedback aptico
Finché il pulsante View
è visibile, il feedback aptico può essere utilizzato per i relativi eventi.
Alcuni eventi, come la pressione prolungata, hanno feedback aptico predefiniti che vengono attivati se un ascoltatore nella visualizzazione gestisce l'evento (restituisce true
).
Un dispositivo Android View
può disattivare il feedback aptico impostando la proprietà
View.hapticFeedbackEnabled
su false
. La disattivazione di questa proprietà
comporta il 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 aptica, l'utilizzo di HapticFeedbackConstants
con un View
non richiede l'autorizzazione VIBRATE
.
Scegli un HapticFeedbackConstant
Quando utilizzi i componenti View
con HapticFeedbackConstants
, non è necessario valutare il supporto di dispositivi specifici, poiché queste costanti avranno un comportamento di riserva, se necessario. L'unica considerazione è il livello SDK della costante che ti interessa.
Esempio 1: pressione dei tasti
Questo è un esempio di come aggiungere un feedback aptico a un input tocco in View
utilizzando gli ascoltatori tocco. 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 anche essere utilizzati per trasmettere un significato astratto. Ad esempio,
l'aspettativa generale per un
CONFIRM
effetto è una
vibrazione breve e leggera, mentre un
REJECT
potrebbe essere un
feedback più forte per segnalare un errore. Questo è illustrato nell'esempio seguente 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 VibrationEffect
predefinito per generare il feedback aptico
L'approccio basato su View
si concentra sull'interazione dell'utente. È preferito per la coerenza in tutto il sistema. Tuttavia, è possibile chiamare anche API VibrationEffect
predefinite specifiche per effetti di feedback aptico personalizzati.
Gli effetti predefiniti sono disponibili come VibrationEffect
costanti e possono essere controllati per verificare il supporto e riprodotti con il servizio Vibrator
, come mostrato negli esempi riportati di seguito.
Informazioni sul supporto dei dispositivi per le API VibrationEffect
Nell'utilizzo di base, non dovrebbe essere necessario verificare il supporto delle singole API VibrationEffect
. Le API come Vibrator.areEffectsSupported
e Vibrator.areAllEffectsSupported
vengono utilizzate per determinare se il dispositivo ha
un'implementazione personalizzata della costante. Se un effetto personalizzato non è presente, la tua app può comunque riprodurre gli effetti e utilizzare un'implementazione di riserva definita dalla piattaforma.
Per maggiori dettagli, consulta Predefiniti
VibrationEffect
.
Prerequisiti: carica l'autorizzazione Vibrazione e VIBRATE
La maggior parte delle vibrazioni può essere riprodotta 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. L'autorizzazione può essere aggiunta al
file manifest dell'applicazione:
<uses-permission android:name="android.permission.VIBRATE"/>
Riprodurre un VibrationEffect
predefinito
Gli effetti predefiniti possono essere preparati utilizzando VibrationEffect.createPredefined
,
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 primitive
L'API VibrationEffect.Composition
offre ulteriori possibilità per il feedback aptico. Tuttavia, a differenza degli effetti, queste primitive non hanno valori di riserva a livello di sistema, il che significa che è necessario prestare molta attenzione alle primitive e ad altre funzionalità supportate dal dispositivo.
L'utilizzo di queste API è descritto in maggiore dettaglio in Creare effetti aptico personalizzati.