Ajouter un retour haptique aux événements

L'un des cas d'utilisation les plus basiques du retour haptique consiste à fournir des commentaires aux utilisateurs des interactions. Sélecteurs de l'heure, pression sur les touches d'un clavier virtuel et texte sont des exemples courants de bons cas d'utilisation du retour haptique. Pour plus pour savoir quand et comment utiliser le retour haptique, consultez 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 une qualité des commentaires adaptés à l'appareil en main.

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

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

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

L'implémentation sous-jacente peut varier en fonction de l'appareil et du matériel mais l'application ne doit tenir compte que du type de commentaires à fournir dans un contexte particulier. En vous concentrant sur la fonctionnalité, vous pouvez activer le retour haptique un feedback 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 View est visible, le retour haptique peut être utilisé pour ses événements. Certains événements, comme l'appui de manière prolongée, ont un retour haptique par défaut qui se déclenche si un l'écouteur sur la vue gère l'événement (renvoie true).

Un View Android peut désactiver le retour haptique en définissant le Propriété View.hapticFeedbackEnabled sur false. Désactiver cette propriété entraîne un retour par défaut.

La méthode performHapticFeedback respecte également le paramètre système HAPTIC_FEEDBACK_ENABLED, qui permet à l'utilisateur de potentiellement 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.

Sélectionner un HapticFeedbackConstant

Lorsque vous utilisez des composants View avec HapticFeedbackConstants, il n'est pas nécessaire pour évaluer la compatibilité de certains appareils, car ces constantes auront des valeurs de remplacement de sécurité si nécessaire. Le seul élément à prendre en compte est le niveau de SDK constante.

Exemple 1: pressions de touche

Cet exemple montre comment ajouter un retour haptique à une saisie tactile dans View. à l'aide d'écouteurs tactiles. Les effets simulent la sensation d'appuyer sur une sur le bouton, puis en le relâchant.

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 appareil. Ils peuvent également être utilisés pour transmettre une signification abstraite. Par exemple : l'attente générale pour une L'effet CONFIRM est un vibrations courtes et légères alors qu'un REJECT est peut-être un en cas de défaillance du signal. Ce processus est illustré dans l'exemple exemple pour le commentaire d'un 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 pour assurer la cohérence à l'échelle du système. Toutefois, des autorisations prédéfinies spécifiques Les API VibrationEffect peuvent également être appelées pour le retour haptique personnalisé. les effets.

Les effets prédéfinis sont disponibles en tant que VibrationEffect constantes et peuvent être ont vérifié la compatibilité et ont joué avec le service Vibrator, comme indiqué dans le les exemples suivants.

Comprendre la compatibilité des API VibrationEffect avec les appareils

Dans le cas d'une utilisation de base, il n'est pas nécessaire de demander le soutien d'une personne VibrationEffect. Les API telles que Vibrator.areEffectsSupported et Vibrator.areAllEffectsSupported sont utilisés pour déterminer si l'appareil a une implémentation personnalisée de la constante. Si aucun effet personnalisé n'est votre application peut toujours en jouer les effets et utiliser un modèle une implémentation de remplacement.

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

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

La plupart des vibrations peuvent être émises 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 Autorisation VIBRATE dans l'ordre pour que l'appareil vibre à l'aide de ce service. L'autorisation peut être ajoutée 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 joué à l'aide de l'une des méthodes vibrate sur Vibrator.

Cet exemple illustre 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 le retour haptique. Toutefois, contrairement aux effets, ces primitives n'ont pas des solutions de secours au niveau du système, ce qui signifie qu'une attention particulière doit être portée les primitives et autres fonctionnalités prises en charge par l'appareil.

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