Lorsque les utilisateurs dessinent, écrivent ou interagissent avec une application à l'aide d'un stylet, ils touchent parfois l'écran avec la paume de leur main. L'événement tactile peut être signalé à votre application avant que le système ne le reconnaisse et l'ignore comme une pression involontaire de la paume de la main.
Identifier et ignorer les gestes avec la paume de la main
Votre application doit identifier les événements tactiles involontaires et les ignorer. Android annule une pression de la paume de la main en envoyant un objet MotionEvent
à votre application.
Examinez les objets
MotionEvent
envoyés à votre application. Utilisez les APIMotionEvent
pour déterminer les propriétés des événements (actions et indicateurs):- Événements à pointeur unique : recherchez
ACTION_CANCEL
. Sur Android 13 et versions ultérieures, recherchez égalementFLAG_CANCELED
. - Événements à pointeurs multiples : sur Android 13 et versions ultérieures, recherchez
ACTION_POINTER_UP
etFLAG_CANCELED
.
- Événements à pointeur unique : recherchez
Ignorez les événements de mouvement qui comportent les propriétés
ACTION_CANCEL
etACTION_POINTER_UP
/FLAG_CANCELED
.
1. Acquérir des objets d'événement de mouvement
Ajoutez un OnTouchListener
à votre application:
Kotlin
val myView = findViewById<View>(R.id.myView).apply { setOnTouchListener { view, event -> // Process motion event. } }
Java
View myView = findViewById(R.id.myView); myView.setOnTouchListener( (view, event) -> { // Process motion event. });
2. Déterminer l'action et les indicateurs d'événement
Recherchez ACTION_CANCEL
, qui indique un événement à pointeur unique à tous les niveaux d'API. Sur Android 13 ou version ultérieure, vérifiez ACTION_POINTER_UP
pour FLAG_CANCELED.
.
Kotlin
val myView = findViewById<View>(R.id.myView).apply { setOnTouchListener { view, event -> when (event.actionMasked) { MotionEvent.ACTION_CANCEL -> { //Process canceled single-pointer motion event for all SDK versions. } MotionEvent.ACTION_POINTER_UP -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && (event.flags and MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) { //Process canceled multi-pointer motion event for Android 13 and higher. } } } true } }
Java
View myView = findViewById(R.id.myView); myView.setOnTouchListener( (view, event) -> { switch (event.getActionMasked()) { case MotionEvent.ACTION_CANCEL: // Process canceled single-pointer motion event for all SDK versions. case MotionEvent.ACTION_UP: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && (event.getFlags() & MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) { //Process canceled multi-pointer motion event for Android 13 and higher. } } return true; });
3. Annuler le geste
Une fois que vous avez identifié une pression de la paume de la main, vous pouvez annuler les effets à l'écran du geste.
Votre application doit conserver un historique des actions de l'utilisateur pour que les entrées involontaires (comme les pressions avec la paume de la main) puissent être annulées. Pour voir un exemple, consultez Implémenter une application de dessin de base dans l'atelier de programmation Améliorer la prise en charge des stylets dans une application Android.
Points essentiels
MotionEvent
: représente les événements tactiles et de mouvement. Contient les informations nécessaires pour déterminer si un événement doit être ignoré.OnTouchListener#onTouch()
: reçoit des objetsMotionEvent
.MotionEvent#getActionMasked()
: renvoie l'action associée à un événement de mouvement.ACTION_CANCEL
: constanteMotionEvent
indiquant qu'un geste doit être annulé.ACTION_POINTER_UP
: constanteMotionEvent
indiquant qu'un autre pointeur que le premier a augmenté (c'est-à-dire qu'il a abandonné le contact avec l'écran de l'appareil).FLAG_CANCELED
: constanteMotionEvent
indiquant que le pointeur a provoqué un événement tactile non intentionnel. Ajout aux événementsACTION_POINTER_UP
etACTION_CANCEL
sur Android 13 (niveau d'API 33) ou version ultérieure.
Résultats
Votre application peut désormais identifier et refuser les gestes de la paume de la main pour les événements à plusieurs pointeurs sur Android 13 ou version ultérieure, et pour les événements à pointeur unique à tous les niveaux d'API.
Collections contenant ce guide
Ce guide fait partie de ces collections de guides rapides sélectionnées qui couvrent des objectifs de développement Android plus larges:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=fr)