Heim  >  Artikel  >  Java  >  Die Slide-Up-Geste von Android löst den Klickbereich aus und erweitert ihn, ohne die Layoutebene zu erhöhen

Die Slide-Up-Geste von Android löst den Klickbereich aus und erweitert ihn, ohne die Layoutebene zu erhöhen

高洛峰
高洛峰Original
2016-12-01 15:32:001600Durchsuche

In neueren Projekten ist es notwendig, den Effekt einer nach oben gleitenden Geste oder eines Klicks zum Herausgleiten aus der Benutzeroberfläche zu erkennen. Die Implementierung besteht darin, GestureDetector zu verwenden und es dann in onFling zu beurteilen, stößt jedoch auf ein Problem: Die nach oben gleitende Geste für das gesamte Layout, aber wenn es eine Rechtsklick-Überwachung für eine separate Ansicht gibt, sind Gesten, die in dieser Ansicht nach oben gleiten, ungültig.

Wenn diese Ansicht selbst speziell zum Klicken verwendet wird, gibt es kein Problem. Leider ist die Größe dieser Ansicht nicht groß, sodass der Klickbereich erweitert werden muss.

Die erste Möglichkeit, die wir uns vorstellen können, besteht darin, die Ansicht mit einem Container zu umschließen, ähnlich wie RelativeLayout, LinearLayout usw., aber dadurch wird dem Layout eine weitere Ebene hinzugefügt.

Können wir uns eine Möglichkeit vorstellen, den Klickbereich zu erweitern, ohne Ebenen hinzuzufügen?

GestureDetector ist eine von Android bereitgestellte Gestenoperationsklasse. Sie ermöglicht Einzelklicks, Doppelklicks, langes Drücken und andere Vorgänge und übergibt diese Ereignisse an onTouch, damit wir die Auslösung des Klicks bestimmen können Ereignis. Um welches Steuerelement handelt es sich?

Unser Problem besteht jedoch darin, den Klickbereich zu erweitern, und nicht darin, das Steuerelement zu identifizieren. Daher müssen wir wissen, auf welchen Bereich die Klickaktion des Benutzers fällt.

Glücklicherweise stellt MotionEvent die Koordinaten bereit, wenn das Ereignis auftritt, sodass wir die Koordinaten beim Klicken kennen und weiter bestimmen können, ob es sich innerhalb des angegebenen Bereichs befindet.

MotionEvent ist eine entscheidende Klasse für die Touch-Codierung in Android. Sie stellt Benutzer-Touch-Informationen auf dem Bildschirm bereit. Wir können den Touch-Ereignistyp und die Touch-Koordinaten über MotionEvent abrufen. Jetzt unterstützt es Multi-Touch und kann außerdem Touch-Indexinformationen abrufen.

Beginnen wir mit dem Code:

@Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            int downX = (int)event.getX();
            int[] location = new int[2];
            ivMore.getLocationInWindow(location);
            if(Math.abs(downX - location[0]) <= 50){
                 ...
            }
        }
        return gestureDetector.onTouchEvent(event);
    }

Wir erhalten zuerst den Touch-Ereignistyp über getAction von MotionEvent. Der Klicktyp ist ACTION_DOWN, und dann erhalten wir den Klick über getX von MotionEvent. x-Koordinate und erhalten Sie dann die Koordinaten der angegebenen Ansicht über getLocationInWindow. Hier wird die x-Achsenkoordinate der Komponente plus oder minus 50 (die den linken und rechten Bereich angibt) als Triggerbereich angegeben.

Wir können jetzt den Klickbereich erweitern, ohne die Layoutebene zu erhöhen.

Es ist sehr einfach, GestureDetector zu verwenden, um eine Slide-Up-Beurteilung zu realisieren. Implementieren Sie einfach die OnGestureListener-Schnittstelle und führen Sie die im entsprechenden Rückruf angegebenen Vorgänge aus. Da GestureDetector selbst jedoch keine Berührungsereignisse erfasst, ist dies erforderlich um onTouch-Ereignisse zu implementieren und onTouchEvent von GestureDetector aufzurufen, um das entsprechende Ereignis zu übergeben.

Der Schiebevorgang wird im onFling-Rückruf ausgeführt, der die beiden historischen MotionEvents übergibt. Wir müssen nur feststellen, ob sich ihre Y-Achsen-Koordinaten geändert haben.

Android Touch ist ein ziemlich großes Thema. Wir müssen nur die entsprechende schnelle Lösung finden, um unsere eigenen Bedürfnisse zu klären.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Dynamischer Java-ProxyNächster Artikel:Dynamischer Java-Proxy