Aggiungere feedback aptico agli eventi

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.

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.