Wenn Nutzer mit einem Eingabestift zeichnen, schreiben oder mit einer App interagieren, berühren sie manchmal das Display mit der Handfläche. Das Touch-Ereignis wird möglicherweise an Ihre App gemeldet, bevor das System es als versehentliche Berührung mit der Handfläche erkennt und verwirft.
Ihre App muss zusätzliche Touch-Ereignisse erkennen und ignorieren. Bei Android 13 und höheren API-Levels werden Handflächenberührungen anders als bei allen anderen API-Levels angegeben.
Ergebnisse
Ihre App kann Handflächenberührungen für Ereignisse mit mehreren Zeigern unter Android 13 und höheren API-Levels sowie für Ereignisse mit einem einzelnen Zeiger auf allen API-Levels erkennen und ablehnen.
Handflächenberührungen erkennen und ignorieren
Unter Android wird eine Handflächenberührung abgebrochen, indem ein MotionEvent
-Objekt an Ihre App gesendet wird.
Untersuchen Sie die
MotionEvent
-Objekte, die an Ihre App gesendet werden. Verwenden Sie dieMotionEvent
-APIs, um Ereigniseigenschaften (Aktionen und Flags) zu ermitteln:- Ereignisse mit einem Zeiger: Suchen Sie nach
ACTION_CANCEL
. Prüfen Sie unter Android 13 und höher auch, obFLAG_CANCELED
vorhanden ist. - Multi-Pointer-Ereignisse: Bei Android 13 und höher sollten Sie nach
ACTION_POINTER_UP
undFLAG_CANCELED
suchen.
- Ereignisse mit einem Zeiger: Suchen Sie nach
Bewegungsereignisse mit den Attributen
ACTION_CANCEL
undACTION_POINTER_UP
/FLAG_CANCELED
ignorieren.
1. Objekte für Bewegungsereignisse abrufen
Fügen Sie Ihrer App ein OnTouchListener
hinzu:
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. Ereignisaktion und ‑flags festlegen
Prüfen Sie, ob ACTION_CANCEL
vorhanden ist. Das weist auf ein Single-Pointer-Ereignis auf allen API-Ebenen hin. Bei Android 13 und höher finden Sie FLAG_CANCELED.
unter ACTION_POINTER_UP
.
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. Geste rückgängig machen
Wenn Sie eine Handflächenberührung erkannt haben, können Sie die Auswirkungen der Geste auf dem Display rückgängig machen.
Ihre App muss einen Verlauf der Nutzeraktionen führen, damit unbeabsichtigte Eingaben wie Berührungen mit der Handfläche rückgängig gemacht werden können. Ein Beispiel dafür, wie der Verlauf beibehalten wird, finden Sie im Codelab Stiftunterstützung in einer Android-App verbessern unter Einfache Zeichen-App implementieren.
Wichtige Fakten
MotionEvent
: Stellt Touch- und Bewegungsereignisse dar. Enthält die Informationen, die erforderlich sind, um zu bestimmen, ob ein Ereignis ignoriert werden soll.OnTouchListener#onTouch()
: EmpfängtMotionEvent
-Objekte.MotionEvent#getActionMasked()
: Gibt die Aktion zurück, die mit einem Bewegungsereignis verknüpft ist.ACTION_CANCEL
:MotionEvent
-Konstante, die angibt, dass eine Geste rückgängig gemacht werden soll.ACTION_POINTER_UP
: Die KonstanteMotionEvent
gibt an, dass ein anderer als der erste Zeiger nach oben bewegt wurde (d. h. den Kontakt mit dem Gerätebildschirm verloren hat).FLAG_CANCELED
:MotionEvent
-Konstante, die angibt, dass das Hochgehen des Zeigers ein unbeabsichtigtes Touch-Ereignis verursacht hat. WurdeACTION_POINTER_UP
- undACTION_CANCEL
-Ereignissen unter Android 13 (API‑Level 33) und höher hinzugefügt.
Sammlungen, die diesen Leitfaden enthalten
Dieser Leitfaden ist Teil der folgenden Kurzanleitungen, die umfassendere Ziele der Android-Entwicklung abdecken:
