Wenn Nutzer mit einem Eingabestift zeichnen, schreiben oder mit einer App interagieren, berühren sie den Bildschirm manchmal mit der Handfläche. Das Touch-Ereignis wird möglicherweise an Ihre App gemeldet, bevor das System das Ereignis als versehentliche Berührung mit der Handfläche erkennt und verwirft.
Ihre App muss fremde Touch-Ereignisse erkennen und ignorieren. Bei Android 13 und höheren API-Levels werden Berührungen mit der Handfläche anders als bei allen anderen API-Levels angegeben.
Ergebnisse
Ihre App kann Berührungen mit der Handfläche für Ereignisse mit mehreren Fingern auf Android 13 und höheren API-Levels sowie für Ereignisse mit einem Finger auf allen API-Levels erkennen und ablehnen.
Versionskompatibilität
Legen Sie für Ereignisse mit mehreren Fingern minSDK Ihres Projekts auf API-Level 33 fest.
Ereignisse mit einem Finger werden auf allen API-Levels unterstützt.
Abhängigkeiten
Keine.
Berührungen mit der Handfläche erkennen und ignorieren
Android bricht eine Berührung mit der Handfläche ab, indem ein MotionEvent-Objekt an Ihre
App gesendet wird.
Prüfen Sie die
MotionEvent-Objekte, die an Ihre App gesendet wurden. Verwenden Sie dieMotionEvent-APIs, um Ereigniseigenschaften (Aktionen und Flags) zu bestimmen:- Ereignisse mit einem Finger : Prüfen Sie, ob
ACTION_CANCELvorhanden ist. Unter Android 13 und höher prüfen Sie auch, obFLAG_CANCELEDvorhanden ist. - Ereignisse mit mehreren Fingern : Prüfen Sie unter Android 13 und höher, ob
ACTION_POINTER_UPundFLAG_CANCELEDvorhanden sind.
- Ereignisse mit einem Finger : Prüfen Sie, ob
Ignorieren Sie Bewegungsereignisse mit den Eigenschaften
ACTION_CANCELundACTION_POINTER_UP/FLAG_CANCELED.
1. Motion-Event-Objekte 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 bestimmen
Prüfen Sie, ob ACTION_CANCEL vorhanden ist. Dies weist auf ein Ereignis mit einem Finger auf allen API-Levels hin. Prüfen Sie unter Android 13 und höher, ob ACTION_POINTER_UP für FLAG_CANCELED. vorhanden ist.
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
Nachdem Sie eine Berührung mit der Handfläche erkannt haben, können Sie die Auswirkungen der Geste auf dem Bildschirm 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 für die Verwaltung des Verlaufs finden Sie im Codelab Unterstützung für Eingabestifte in Android Apps unter Implement a basic drawing app (Eine 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 Motion-Event verknüpft ist.ACTION_CANCEL:MotionEvent-Konstante, die angibt, dass eine Geste rückgängig gemacht werden soll.ACTION_POINTER_UP:MotionEvent-Konstante, die angibt, dass ein anderer Finger als der erste Finger angehoben wurde (d. h., er hat den Kontakt mit dem Gerätebildschirm verloren).FLAG_CANCELED:MotionEvent-Konstante, die angibt, dass das Anheben des Fingers ein unbeabsichtigtes Touch-Ereignis verursacht hat. Wird unter Android 13 (API-Level 33) und höher den EreignissenACTION_POINTER_UPundACTION_CANCELhinzugefügt.
Sammlungen, die diesen Leitfaden enthalten
Dieser Leitfaden ist Teil der folgenden ausgewählten Sammlungen von Kurzanleitungen, die umfassendere Ziele der Android-Entwicklung abdecken: