Wenn Nutzer mit einem Eingabestift zeichnen, schreiben oder mit einer App interagieren, berühren sie manchmal das Display mit der Handfläche. Das Berührungsereignis 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 Zeiger auf allen API-Levels erkennen und ablehnen.
Versionskompatibilität
Legen Sie für das minSDK Ihres Projekts API-Level 33 für Ereignisse mit mehreren Zeigern fest.
Single-Pointer-Ereignisse werden auf API-Ebenen unterstützt.
Abhängigkeiten
Keine.
Handflächenberührungen erkennen und ignorieren
Unter Android wird eine Handflächenberührung abgebrochen, indem ein MotionEvent-Objekt an Ihre App gesendet wird.
Prüfen 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. Bei Android 13 und höher sollten Sie auch nachFLAG_CANCELEDsuchen. - Multi-Pointer-Ereignisse: Prüfen Sie unter Android 13 und höher auf
ACTION_POINTER_UPundFLAG_CANCELED.
- Ereignisse mit einem Zeiger: Suchen Sie nach
Bewegungsereignisse mit den Attributen
ACTION_CANCELundACTION_POINTER_UP/FLAG_CANCELEDignorieren.
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 ‑kennzeichnungen ermitteln
Suchen Sie nach ACTION_CANCEL. Dies 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 Displayeffekte der Geste 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 Bewegungserkennungsvorgang verknüpft ist.ACTION_CANCEL:MotionEvent-Konstante, die angibt, dass eine Geste rückgängig gemacht werden soll.ACTION_POINTER_UP: DieMotionEvent-Konstante, die angibt, 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. Wurde den EreignissenACTION_POINTER_UPundACTION_CANCELunter Android 13 (API‑Level 33) und höher hinzugefügt.
Sammlungen, die diesen Leitfaden enthalten
Dieser Leitfaden ist Teil der folgenden kuratierten Sammlungen von Kurzanleitungen, die umfassendere Ziele der Android-Entwicklung abdecken: