Implémentez le retour haptique dans les applications Android à l'aide des composants View, des API VibrationEffect prédéfinies et des compositions ancrées dans la chronologie avec VibrationEffect.Builder. keywords_public: > Développement Android, haptique, retour haptique, UI, vues, VibrationEffect, View.performHapticFeedback, Vibrator, constantes haptiques
L'un des cas d'utilisation les plus élémentaires du retour haptique est de fournir un feedback aux interactions des utilisateurs. Les sélecteurs de temps, les frappes sur un clavier virtuel et la sélection de texte sont des exemples courants de bons cas d'utilisation pour le retour haptique. Pour en savoir plus sur quand et comment appliquer les retours haptiques, consultez Principes de conception haptique.
Cette page décrit trois façons de fournir un retour haptique.
- Utilisez un
View(recommandé). Cette approche est axée sur l'action, est la plus largement prise en charge et ne nécessite pas l'autorisationVIBRATE. - Utilisez un
VibrationEffectprédéfini. Cette approche offre plus de flexibilité, mais présente certains inconvénients. - Utilisez des compositions ancrées dans la timeline avec
VibrationEffect.Builder. Cette approche est la plus flexible. Elle vous permet de séquencer des préréglages, des enveloppes et d'autres éléments de vibration le long d'une timeline avec une prise en charge automatique intégrée des solutions de repli.
Ces méthodes utilisent des primitives définies au niveau de l'appareil pour fournir un retour d'information de haute qualité adapté à l'appareil utilisé.
Par défaut, toutes les méthodes de rétroaction haptique respectent les paramètres de rétroaction 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 de l'appareil et des capacités matérielles, mais l'application n'a besoin de 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 : 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 prolongé, ont des retours haptiques par défaut qui sont déclenchés si un écouteur sur 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. Si vous désactivez cette propriété, les commentaires par défaut s'affichent.
La méthode performHapticFeedback respecte également le paramètre système HAPTIC_FEEDBACK_ENABLED, qui permet à l'utilisateur de les désactiver potentiellement 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.
Choisissez un 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 secours si nécessaire. La seule chose à prendre en compte est le niveau du SDK de la constante souhaitée.
Exemple 1 : Appui sur une touche
Voici un exemple d'ajout d'un retour haptique à une entrée tactile dans View à l'aide d'écouteurs tactiles. Les effets simulent la sensation 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'effet CONFIRM est généralement une vibration courte et légère, tandis que l'effet REJECT peut être un retour plus fort pour signaler un échec. Ceci est illustré dans l'exemple suivant pour un retour d'information 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 View se concentre sur l'interaction utilisateur. Nous vous recommandons donc de la privilégier pour assurer la cohérence du système. Toutefois, vous pouvez également appeler des API VibrationEffect prédéfinies spécifiques pour des effets de rétroaction haptique personnalisés.
Les effets prédéfinis sont disponibles en tant que constantes VibrationEffect. Vous pouvez vérifier s'ils sont compatibles et les lire avec le service Vibrator, comme indiqué dans les exemples suivants.
Comprendre la compatibilité des appareils avec les API VibrationEffect
Dans le cas d'une utilisation de base, il ne devrait pas être nécessaire de vérifier la compatibilité des API VibrationEffect individuelles. Les API telles que Vibrator.areEffectsSupported et Vibrator.areAllEffectsSupported sont utilisées pour 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 lire les effets et utiliser une implémentation de secours définie par la plate-forme.
Pour en savoir plus, consultez VibrationEffect prédéfini.
Prérequis : 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);
Votre application doit disposer de l'autorisation VIBRATE pour faire vibrer l'appareil à l'aide de ce service. Vous pouvez ajouter cette autorisation 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 lit 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 VibrationEffect.Builder pour créer des compositions
À partir d'Android 16 (4e trimestre 2024), l'API VibrationEffect.Builder offre le moyen le plus flexible et le plus expressif de créer un retour haptique personnalisé en séquençant des préréglages, des enveloppes et d'autres éléments de vibration distincts le long d'une chronologie.
De plus, les compositions créées avec VibrationEffect.Builder disposent d'une prise en charge de secours automatique intégrée pour leurs éléments compatibles.
La composition d'effets haptiques avec VibrationEffect.Builder (et l'API VibrationEffect.Composition) est abordée plus en détail dans Créer des effets haptiques personnalisés.