Ajouter un retour haptique aux événements

L'un des cas d'utilisation les plus élémentaires du retour haptique consiste à fournir des commentaires aux interactions des utilisateurs. Les sélecteurs de temps, l'appui sur une touche d'un clavier virtuel et la sélection de texte sont des exemples courants de cas d'utilisation de retour haptique. Pour savoir quand et comment appliquer le retour haptique, consultez les principes de conception haptique.

Cette page décrit trois façons d'effectuer 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 question.

Toutes les méthodes de retour haptique respectent par défaut les paramètres de retour tactile de l'utilisateur.

Utiliser les 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 se concentrent sur leur fonctionnalité dans une application, et non sur le type d'effet haptique réalisé.

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

Conditions préalables: Activer le retour haptique

Tant que le View est visible, le retour haptique peut être utilisé pour ses événements. Certains événements, tels que les appuis de manière prolongée, ont 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 l'envoi d'un commentaire par défaut.

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

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

Sélectionner un(e) HapticFeedbackConstant

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

Exemple 1: Pression de touche

Voici un exemple d'ajout d'un retour haptique à une entrée tactile dans View à l'aide d'écouteurs tactiles. Les effets simulent le sentiment d'appuyer sur un bouton, puis de le relâcher.

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'attente générale pour un effet CONFIRM est une vibration courte et légère, tandis qu'un REJECT peut fournir un retour plus important pour signaler une défaillance. Ceci est illustré dans l'exemple suivant, qui représente un commentaire sur le bouton "Envoyer".

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 recommandé pour assurer la cohérence au sein du système. Cependant, 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 utiliser avec le service Vibrator, comme illustré dans les exemples suivants.

Comprendre la compatibilité des appareils avec les API VibrationEffect

En utilisation de base, il ne devrait pas être nécessaire de vérifier la prise en charge 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 aucun effet personnalisé n'est présent, votre application peut toujours les diffuser 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: charger 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 en utilisant 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 a un effet 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 de retour haptique. Toutefois, contrairement aux effets, ces primitives ne disposent pas de solutions de secours au niveau du système, ce qui signifie qu'une attention particulière doit être portée aux primitives et aux autres fonctionnalités compatibles avec l'appareil.

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