Ajouter un retour haptique aux événements

L'un des cas d'utilisation les plus basiques de la haptique est de fournir un retour sur les interactions utilisateur. Les sélecteurs de date et d'heure, la pression sur les touches d'un clavier virtuel et la sélection de texte sont des exemples courants de bons cas d'utilisation du retour haptique. Pour en savoir plus sur le moment et la manière d'appliquer les retours haptiques, consultez la section Principes de conception haptique.

Cette page décrit trois façons de fournir un retour haptique.

Ces méthodes utilisent des primitives définies au niveau de l'appareil pour fournir des commentaires de haute qualité adaptés à l'appareil en main.

Par défaut, toutes les méthodes de retour haptique respectent les paramètres de retour tactile de l'utilisateur.

Utiliser des composants View pour générer un retour haptique

Utilisez la méthode View.performHapticFeedback pour générer un retour haptique. Les constantes haptiques définies par HapticFeedbackConstants sont axées sur leur fonctionnalité dans une application, et non sur le type d'effet haptique effectué.

L'implémentation sous-jacente peut varier en fonction des fonctionnalités de l'appareil et du matériel, mais l'application ne doit prendre en compte que le type de commentaires à fournir dans un contexte particulier. En vous concentrant sur la fonctionnalité, vous pouvez activer le retour haptique pour des interactions similaires. Au fil du temps, les utilisateurs apprennent à associer différentes significations à différentes sensations haptiques.

Conditions préalables: Activez le retour haptique.

Tant que le View est visible, le retour haptique peut être utilisé pour ses événements. Certains événements, tels que le appui long, sont associés à des retours haptiques par défaut qui sont déclenchés si un écouteur de la vue gère l'événement (renvoie true).

Un View Android peut désactiver le retour haptique en définissant la propriété View.hapticFeedbackEnabled sur false. La désactivation de cette propriété entraîne des commentaires par défaut.

La méthode performHapticFeedback respecte également le paramètre système HAPTIC_FEEDBACK_ENABLED, ce qui permet à l'utilisateur de les désactiver pour l'ensemble du système.

Contrairement aux autres API haptiques, l'utilisation de HapticFeedbackConstants avec un View ne nécessite pas l'autorisation VIBRATE.

Choisir une HapticFeedbackConstant

Lorsque vous utilisez des composants View avec HapticFeedbackConstants, il n'est pas nécessaire d'évaluer la compatibilité avec des appareils spécifiques, car ces constantes auront un comportement de remplacement si nécessaire. Le seul élément à prendre en compte est le niveau du SDK de la constante souhaitée.

Exemple 1: Appuyer sur une touche

Voici un exemple d'ajout d'un retour haptique à une saisie tactile dans View à l'aide d'écouteurs tactiles. Les effets simulent la sensation de pression sur un bouton, puis de relâchement.

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;
  }
}

Exemple 2: Bouton "Envoyer"

Les cas d'utilisation du retour haptique vont au-delà de la simulation d'une interaction physique avec l'appareil. Ils peuvent également être utilisés pour transmettre une signification abstraite. Par exemple, l'effet CONFIRM est généralement associé à une vibration courte et légère, tandis qu'un REJECT peut être un retour plus fort pour signaler une défaillance. Vous en trouverez l'illustration dans l'exemple suivant pour les commentaires sur un bouton d'envoi.

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);
  }
});

Utiliser un VibrationEffect prédéfini pour générer un retour haptique

L'approche basée sur View se concentre sur l'interaction utilisateur. Il est préférable de le faire pour assurer la cohérence dans l'ensemble du système. Toutefois, des API VibrationEffect prédéfinies spécifiques peuvent également être appelées pour des effets de retour haptique personnalisés.

Les effets prédéfinis sont disponibles en tant que constantes VibrationEffect. Vous pouvez vérifier leur compatibilité et les lire avec le service Vibrator, comme illustré dans les exemples suivants.

Comprendre la prise en charge des API VibrationEffect par les appareils

En utilisation de base, il n'est pas nécessaire de vérifier la compatibilité des API VibrationEffect individuelles. Les API telles que Vibrator.areEffectsSupported et Vibrator.areAllEffectsSupported permettent de déterminer si l'appareil dispose d'une implémentation personnalisée de la constante. Si un effet personnalisé n'est pas présent, votre application peut toujours lire les effets et utiliser une implémentation de remplacement définie par la plate-forme.

Pour en savoir plus, consultez la section VibrationEffect prédéfinis.

Conditions préalables: Chargez le vibreur et l'autorisation VIBRATE.

La plupart des vibrations peuvent être lues avec le service Vibrator, qui peut être chargé comme suit:

Kotlin

import android.os.Vibrator

val vibrator = context.getSystemService(Vibrator::class.java)

Java

import android.os.Vibrator;

Vibrator vibrator = context.getSystemService(Vibrator.class);

L'application doit disposer de l'autorisation VIBRATE pour faire vibrer l'appareil à l'aide de ce service. L'autorisation peut être ajoutée au fichier manifeste de l'application:

<uses-permission android:name="android.permission.VIBRATE"/>

Lire un VibrationEffect prédéfini

Les effets prédéfinis peuvent être préparés à l'aide de VibrationEffect.createPredefined, puis lus à l'aide de l'une des méthodes vibrate sur Vibrator.

Cet exemple exécute un effet de 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));

Utiliser des compositions avancées avec des primitives

L'API VibrationEffect.Composition offre des possibilités supplémentaires pour les retours haptiques. Toutefois, contrairement aux effets, ces primitives ne disposent pas de solutions de remplacement au niveau du système, ce qui signifie que vous devez faire très attention aux primitives et aux autres fonctionnalités compatibles avec l'appareil.

L'utilisation de ces API est décrite plus en détail dans la section Créer des effets haptiques personnalisés.