Uno dei casi d'uso più basilari dell'aptica è fornire un feedback alle interazioni dell'utente. I selettori di ora, la pressione dei tasti su una tastiera virtuale e la selezione del testo sono esempi comuni di casi d'uso validi per il feedback aptico. Per ulteriori informazioni su quando e come applicare la tecnologia aptica, leggi Principi di progettazione aptica.
Questa pagina descrive tre modi per fornire feedback aptico.
- Utilizza un
View(opzione consigliata). Questo approccio è orientato all'azione, ha il supporto più ampio e non richiede l'autorizzazioneVIBRATE. - Utilizza un
VibrationEffectpredefinito. Questo approccio offre maggiore flessibilità, ma con alcuni compromessi. - Utilizza composizioni ancorate alla sequenza temporale con
VibrationEffect.Builder. Questo approccio è il più flessibile e ti consente di sequenziare preset, inviluppi e altri elementi di vibrazione lungo una sequenza temporale con supporto automatico integrato per il fallback.
Questi metodi utilizzano primitive definite a livello di dispositivo per fornire un feedback di alta qualità adattato al dispositivo in uso.
Per impostazione predefinita, tutti i metodi di feedback aptico rispettano le impostazioni di feedback tattile dell'utente.
Utilizza i componenti View per generare feedback aptico
Utilizza il metodo View.performHapticFeedback per generare il feedback aptico. Le
costanti aptiche definite da HapticFeedbackConstants sono incentrate sulla loro
funzionalità in un'applicazione, non sul tipo di effetto aptico eseguito.
L'implementazione sottostante può variare a seconda del dispositivo e delle funzionalità hardware, ma l'app deve considerare solo il tipo di feedback da fornire in un contesto specifico. Concentrandoti sulla funzionalità, puoi attivare il feedback aptico per interazioni simili. Nel tempo, gli utenti imparano ad associare significati diversi a sensazioni aptiche diverse.
Prerequisiti: attiva il feedback aptico
Finché il View è visibile, il feedback aptico può essere utilizzato per i relativi eventi.
Alcuni eventi, come il tocco prolungato, hanno un feedback aptico predefinito che viene attivato se un
listener nella visualizzazione gestisce l'evento (restituisce true).
Un View Android può disattivare il feedback aptico impostando la proprietà
View.hapticFeedbackEnabled su false. Se disattivi questa proprietà,
viene visualizzato il feedback predefinito.
Il metodo performHapticFeedback rispetta anche l'impostazione di sistema
HAPTIC_FEEDBACK_ENABLED, che consente all'utente di disattivarli potenzialmente
per l'intero sistema.
A differenza di altre API aptiche, 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 fallback, se necessario. L'unica considerazione è il livello SDK della costante desiderata.
Esempio 1: pressione di un tasto
Questo è un esempio di come aggiungere un feedback aptico a un input tocco in View
utilizzando i listener di 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. Possono anche essere usati per trasmettere un significato astratto. Ad esempio,
l'aspettativa generale per un
effetto di CONFIRM è una
vibrazione breve e leggera, mentre un
REJECT potrebbe essere un
feedback più forte per segnalare un errore. Ciò è illustrato nel seguente
esempio per un feedback del pulsante di invio.
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); } });
Utilizzare un VibrationEffect predefinito per generare feedback aptico
L'utilizzo dell'approccio basato su View si concentra sull'interazione dell'utente,
quindi preferiscilo per garantire la coerenza in tutto il sistema. Tuttavia, puoi anche richiamare API VibrationEffect specifiche predefinite per effetti di feedback aptico personalizzati.
Gli effetti predefiniti sono disponibili come VibrationEffect
costanti e possono essere
controllati per il supporto e riprodotti con il servizio Vibrator come mostrato negli
esempi seguenti.
Informazioni sul supporto dei dispositivi delle API VibrationEffect
Nell'utilizzo di base, non è 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, vedi VibrationEffect
predefinito.
Prerequisiti: carica la vibrazione e l'autorizzazione VIBRATE
La maggior parte delle vibrazioni può essere riprodotta con il servizio Vibrator, che può essere caricato
nel seguente modo:
Kotlin
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Java
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
La tua app deve disporre dell'autorizzazione VIBRATE per far vibrare
il dispositivo utilizzando questo servizio. Puoi aggiungere questa autorizzazione al file manifest dell'applicazione:
<uses-permission android:name="android.permission.VIBRATE"/>
Riproduci un VibrationEffect predefinito
Gli effetti predefiniti possono essere preparati utilizzando VibrationEffect.createPredefined,
quindi riprodotti utilizzando uno dei metodi vibrate su Vibrator.
Questo esempio riproduce un effetto di 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 VibrationEffect.Builder per creare composizioni
A partire da Android 16 (quarto trimestre 2026), l'API
VibrationEffect.Builder offre il modo più
flessibile ed espressivo per creare un feedback aptico personalizzato sequenziando
preset discreti, inviluppi e altri elementi di vibrazione lungo una sequenza temporale.
Inoltre, le composizioni create con VibrationEffect.Builder hanno
supporto di fallback automatico integrato per gli elementi supportati.
La composizione di effetti aptici con VibrationEffect.Builder (e l'API VibrationEffect.Composition) è descritta in modo più dettagliato in Creazione di effetti aptici personalizzati.