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.
- Utilisez un
View
(recommandé). Cette approche est axée sur l'action, est la plus compatible et ne nécessite pas l'autorisationVIBRATE
. - Utilisez un
VibrationEffect
prédéfini. Cette approche est plus flexible, mais présente certains compromis. - Utilisez des compositions avancées avec des primitives. Cette méthode est plus récente et encore plus flexible, mais nécessite une compatibilité spécifique de l'appareil.
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.