Ich möchte, dass meine App erkennt, wenn ein Benutzer auf dem Telefonbildschirm von rechts nach links wischt.
Wie macht man das?
android
swipe
gesture-recognition
Endryha
quelle
quelle
Antworten:
OnSwipeTouchListener.java :
Verwendungszweck:
quelle
OnSwipeTouchListener
, der einen Kontext erhält, da dieser Konstruktor vonGestureDetector
seit API-Ebene 3 veraltet ist, und denGestureDetector
in diesem Konstruktor instanziieren .onTouch
in dieOnSwipeTouchListener
Definition zu wechseln . Andernfalls wird in meiner IDE der Fehler "Zugriff auf ein privates Mitglied" angezeigtDieser Code erkennt linke und rechte Wischbewegungen, vermeidet veraltete API-Aufrufe und weist gegenüber verschiedenen Antworten weitere Verbesserungen auf.
Verwenden Sie es so:
quelle
setOnTouchListener
(normalerweise inonCreate
) platzieren würden.context
ist derthis
Zeiger (es sei denn, Sie erstellen ein Fragment).Fragment.getActivity()
.Wenn Sie hier auch Klickereignisse verarbeiten müssen, einige Änderungen:
Und Beispielnutzung:
quelle
Erweitern Sie Mireks Antwort für den Fall, dass Sie die Wischgesten in einer Bildlaufansicht verwenden möchten. Standardmäßig wird der Touch-Listener für die Bildlaufansicht deaktiviert und daher wird keine Bildlaufaktion ausgeführt. Um dies zu beheben, müssen Sie die
dispatchTouchEvent
Methode von überschreibenActivity
und die geerbte Version dieser Methode zurückgeben, nachdem Sie mit Ihrem eigenen Listener fertig sind.Um ein paar Änderungen an Mireks Code vorzunehmen: Ich füge einen Getter für den
gestureDetector
in derOnSwipeTouchListener
.Deklarieren Sie das
OnSwipeTouchListener
Innere der Aktivität als klassenweites Feld.Ändern Sie den Verwendungscode entsprechend:
Und überschreiben Sie die
dispatchTouchEvent
Methode im InnerenActivity
:Jetzt sollten sowohl Bildlauf- als auch Wischaktionen funktionieren.
quelle
Um zu haben
Click Listener
,DoubleClick Listener
,OnLongPress Listener
,Swipe Left
,Swipe Right
,Swipe Up
,Swipe Down
auf EinzelView
müssen SiesetOnTouchListener
. dhDazu benötigen Sie eine
OnSwipeTouchListener
Klasse, die implementiertOnTouchListener
.quelle
Sie brauchen keine komplizierten Berechnungen. Dies kann einfach über die
OnGestureListener
Schnittstelle derGestureDetector
Klasse erfolgen.Innerhalb der
onFling
Methode können Sie alle vier Richtungen wie folgt erkennen:MyGestureListener.java
::Verwendungszweck:
quelle
velocityX
undvelocityY
inonFling
Methode. Sie können zwar experimentieren, um herauszufinden, welcher Wert Ihren Anforderungen am besten entspricht, aber die endgültige Zahl wäre universell.Verwenden Sie SwipeListView und lassen Sie es die Gestenerkennung für Sie übernehmen.
quelle
Kotlin-Version von @Mirek Rusin ist hier:
OnSwipeTouchListener.kt:
Verwendungszweck:
Das
open
Schlüsselwort war der Punkt für mich ...quelle
Um auch einen onClick hinzuzufügen, habe ich Folgendes getan.
Ich verwende Fragmente, also verwende ich getActivity () für den Kontext. So habe ich es implementiert - und es funktioniert.
quelle
@ Edward Breys Methode funktioniert großartig. Wenn jemand auch die Importe für kopieren und einfügen möchte
OnSwipeTouchListener
, sind sie hier:quelle
Eine kleine Modifikation der Antwort von @Mirek Rusin und jetzt können Sie Multitouch-Wischbewegungen erkennen. Dieser Code ist auf Kotlin:
Wobei Gesture.SWIPE_RIGHT und andere eindeutige Ganzzahlindikatoren für Gesten sind, mit denen ich später in meiner Aktivität eine Art von Geste erkenne:
Sie sehen also, dass die Geste hier eine ganzzahlige Variable ist, die den Wert enthält, den ich zuvor übergeben habe.
quelle
Meine Lösung ähnelt der oben beschriebenen, aber ich habe die Gestenbehandlung in eine abstrakte Klasse abstrahiert
OnGestureRegisterListener.java
, die Wisch- , Klick- und Langklick- Gesten umfasst.OnGestureRegisterListener.java
Und benutze es so. Beachten Sie, dass Sie Ihren
View
Parameter auch einfach übergeben können .quelle
Ich habe ähnliche Dinge getan, aber nur für horizontale Wischbewegungen
Und dann kann es für Ansichtskomponenten verwendet werden
quelle
Diese Frage wurde vor vielen Jahren gestellt. Jetzt gibt es eine bessere Lösung: SmartSwipe: https://github.com/luckybilly/SmartSwipe
Code sieht so aus:
quelle
@ Mirek Rusin Answeir ist sehr gut. Aber es gibt einen kleinen Fehler, und die Behebung ist erforderlich -
Was ist der Unterschied? Wir setzen result = true nur, wenn wir überprüft haben, ob alle Anforderungen erfüllt sind (sowohl SWIPE_THRESHOLD als auch SWIPE_VELOCITY_THRESHOLD sind in Ordnung). Dies ist wichtig, wenn wir Swipe verwerfen, wenn einige der Anforderungen nicht erfüllt sind, und wir müssen in der onTouchEvent-Methode von OnSwipeTouchListener etwas tun!
quelle
Hier ist ein einfacher Android-Code zum Erkennen der Gestenrichtung
Schreiben Sie in
MainActivity.java
undactivity_main.xml
den folgenden Code:quelle
quelle
Wenn Sie beim Streichen eines Listenelements einige Schaltflächen mit Aktionen anzeigen möchten, gibt es viele Bibliotheken im Internet, die dieses Verhalten aufweisen. Ich habe die Bibliothek, die ich im Internet gefunden habe, implementiert und bin sehr zufrieden. Es ist sehr einfach zu bedienen und sehr schnell. Ich habe die ursprüngliche Bibliothek verbessert und einen neuen Klick-Listener für das Klicken auf Elemente hinzugefügt. Außerdem habe ich eine Bibliothek für großartige Schriftarten hinzugefügt ( http://fortawesome.github.io/Font-Awesome/ ). Jetzt können Sie einfach einen neuen Elementtitel hinzufügen und den Symbolnamen für großartige Schriftarten angeben.
Hier ist der Github-Link
quelle
quelle
die Verwendung von Edward Breys Antwort in Kotlin
quelle