Eingabestift-Berührungen der Handfläche ablehnen

Wenn Nutzer mit einem Eingabestift zeichnen, schreiben oder mit einer App interagieren, berühren sie manchmal den Bildschirm mit der Handfläche. Das Touch-Ereignis wird möglicherweise an Ihre App gesendet, bevor das System das Ereignis als versehentliche Berührung mit der Handfläche erkennt und ablehnt.

Berührungen mit der Handfläche erkennen und ignorieren

Ihre App muss unerwünschte Touch-Ereignisse 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 an Ihre App gesendeten MotionEvent-Objekte. Verwenden Sie die MotionEvent APIs, um Ereigniseigenschaften (Aktionen und Flags) zu ermitteln:

    • Ereignisse mit einem einzelnen Zeiger: Prüfen Sie, ob ACTION_CANCEL angezeigt wird. Bei Android 13 und höher muss auch FLAG_CANCELED angezeigt werden.
    • Mehrere Touch-Ereignisse: Prüfen Sie unter Android 13 und höher, ob ACTION_POINTER_UP und FLAG_CANCELED vorhanden sind.
  • Bewegungsereignisse mit den Properties ACTION_CANCEL und ACTION_POINTER_UP/FLAG_CANCELED ignorieren

1. Objekte von Bewegungsereignissen erfassen

Fügen Sie Ihrer App einen 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 ermitteln

Prüfen Sie, ob ACTION_CANCEL vorhanden ist. Dies weist auf ein Ereignis mit einem einzelnen Zeiger auf allen API-Ebenen hin. Bei Android 13 und höher: Prüfen Sie, ob ACTION_POINTER_UP für FLAG_CANCELED. aktiviert 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 Bildschirmeffekte der Geste rückgängig machen.

Ihre App muss einen Verlauf der Nutzeraktionen speichern, damit unbeabsichtigte Eingaben wie Touch-Gesten rückgängig gemacht werden können. Ein Beispiel für die Verwaltung des Verlaufs finden Sie im Codelab Stylus-Unterstützung in einer Android-App verbessern unter Eine einfache Zeichenanwendung 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(): Hier werden MotionEvent-Objekte empfangen.
  • 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: MotionEvent-Konstante, die angibt, dass ein anderer Cursor als der erste Cursor nach oben gegangen ist (d. h. den Kontakt zum Display des Geräts verloren hat).
  • FLAG_CANCELED: MotionEvent-Konstante, die angibt, dass ein unbeabsichtigtes Touch-Ereignis durch das Bewegen des Cursors nach oben verursacht wurde. Wurde ACTION_POINTER_UP- und ACTION_CANCEL-Ereignissen unter Android 13 (API-Level 33) und höher hinzugefügt.

Ergebnisse

Ihre App kann jetzt Touch-Gesten mit der Handfläche für Mehrfingerereignisse auf Android 13 und höheren API-Levels sowie für Einzelfingerereignisse auf allen API-Levels erkennen und ablehnen.

Sammlungen, die diesen Leitfaden enthalten

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

Sorgen Sie dafür, dass Ihre App auf Tablets, faltbaren Geräten und ChromeOS-Geräten optimiert genutzt werden kann.

Hast du Fragen oder Feedback?

Auf unserer Seite mit häufig gestellten Fragen finden Sie Kurzanleitungen. Sie können sich auch gern an uns wenden.