Eingabestift-Berührungen der Handfläche ablehnen

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 die MotionEvent-APIs, um Ereigniseigenschaften (Aktionen und Flags) zu bestimmen:

    • Ereignisse mit einem Finger : Prüfen Sie, ob ACTION_CANCEL vorhanden ist. Unter Android 13 und höher prüfen Sie auch, ob FLAG_CANCELED vorhanden ist.
    • Ereignisse mit mehreren Fingern : Prüfen Sie unter Android 13 und höher, ob ACTION_POINTER_UP und FLAG_CANCELED vorhanden sind.
  • Ignorieren Sie Bewegungsereignisse mit den Eigenschaften ACTION_CANCEL und ACTION_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ängt MotionEvent-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 Ereignissen ACTION_POINTER_UP und ACTION_CANCEL hinzugefügt.

Sammlungen, die diesen Leitfaden enthalten

Dieser Leitfaden ist Teil der folgenden ausgewählten Sammlungen von Kurzanleitungen, die umfassendere Ziele der Android-Entwicklung abdecken:

Ermöglichen Sie Ihrer App, eine optimierte Nutzererfahrung auf Tablets, faltbaren Geräten und ChromeOS-Geräten zu bieten.

Fragen oder Feedback

Auf der Seite mit häufig gestellten Fragen finden Sie weitere Informationen zu Kurzanleitungen. Sie können uns auch kontaktieren und uns Ihre Meinung mitteilen.