Ich habe einen EditText
Blick in Android. Darauf möchte ich ein Wischen nach links oder rechts erkennen. Ich kann es mit dem folgenden Code auf eine leere Stelle bringen. Aber das funktioniert nicht, wenn ich auf einem wische EditText
. Wie mache ich das? Bitte lassen Sie mich wissen, wenn ich etwas falsch mache. Danke dir.
Verwendeter Code:
switch (touchevent.getAction())
{
case MotionEvent.ACTION_DOWN:
{
oldTouchValue = touchevent.getX();
break;
}
case MotionEvent.ACTION_UP:
{
float currentX = touchevent.getX();
if (oldTouchValue < currentX)
{
// swiped left
}
if (oldTouchValue > currentX )
{
swiped right
}
break;
}
}
Antworten:
Einfachster Wischdetektor von links nach rechts:
Fügen Sie in Ihrer Aktivitätsklasse folgende Attribute hinzu:
und
onTouchEvent()
Methode überschreiben :quelle
getAction()
gemischte Daten sowohl des Aktionstyps als auch des Zeigerindex zurückgegeben werden, ist es nicht besser, diese zu verwendengetActionMasked()
, die nur den Aktionstyp zurückgeben.Ich mag den Code von @ user2999943. Aber nur ein paar kleine Änderungen für meine eigenen Zwecke.
quelle
Dies ist eine nette Klasse, die ich verwende (in Fällen, in denen ich ein Ereignis in einer Ansicht abfangen möchte, wenn es sich um eine ViewGroup handelt, verwende ich die zweite Implementierung):
und dies ist ein Anwendungsbeispiel:
In einigen Fällen möchten Sie die Wischgesten in einem Container erkennen und die Berührungsereignisse an die untergeordneten Elemente weitergeben, sodass Sie in diesem Fall eine benutzerdefinierte Ansichtsgruppe erstellen können, z. B. RelativeLayout, und onInterceptTouchEvent überschreiben können, und dort das Wischereignis erkennen können ohne den Durchgang von Touch Event zu Ihren untergeordneten Ansichten zu blockieren, zum Beispiel:
quelle
Swipe-Ereignisse sind eine Art von
onTouch
Ereignissen. Vereinfachen Sie einfach die Antwort von @Gal Rom, behalten Sie einfach die vertikalen und horizontalen Deltas im Auge, und mit ein wenig Mathematik können Sie bestimmen, welche Art von Wischen ein touchEvent war. (Lassen Sie mich noch einmal betonen, dass dies OBSENELY auf einer früheren Antwort beruhte, aber die Einfachheit mag Anfänger ansprechen). Die Idee ist, einen OnTouchListener zu erweitern, zu erkennen, welche Art von Wischen (Berühren) gerade passiert ist, und für jede Art bestimmte Methoden aufzurufen.quelle
Ich habe eine einfache Klasse geschrieben, die es einfach macht, die Swipe-Ereignisse zu erkennen - TOP, RIGHT, BOTTOM, LEFT.
1: Einzelne Wischereignisse erkennen
2: Erkennen Sie eines der Swipe-Ereignisse mit einem Rückruf.
Hier ist ein Blog-Beitrag mit Erläuterungen zur Verwendung: http://bmutinda.com/android-detect-swipe-events/
Ich habe auch eine Übersicht für die hier verfügbaren Codefragmente erstellt: https://gist.github.com/bmutinda/9578f70f1df9bd0687b8
Vielen Dank.
quelle
Swipe Detector von links nach rechts und von rechts nach links
Deklarieren Sie zunächst zwei Variablen des Datentyps float.
Zweitens verdrahten Sie Ihre XML-Ansicht in Java. Wie ich habe
ImageView
Drittens
setOnTouchListener
auf IhreImageView
.quelle
Ich möchte die akzeptierte Antwort ergänzen, die teilweise funktioniert, aber die Zeitvariable fehlt, die sie perfekt macht.
Einfachster Wischdetektor von links nach rechts mit einer Zeitvariablen:
Fügen Sie in Ihrer Aktivitätsklasse folgende Attribute hinzu:
und überschreiben Sie die onTouchEvent () -Methode:
quelle
Ich denke, was du willst, heißt Fling. Die MotionEvents können verwendet werden, um die Richtung des Schleuderns zu bestimmen.
http://developer.android.com/training/gestures/detector.html
quelle
Erkennen Sie das Streichen in vier Richtungen
und
quelle
Nach einem ganzen Tag Arbeit an dieser Funktion kann man endlich die richtige Antwort bekommen.
Viel Glück .
quelle
Wenn Sie das Ereignis vom Beginn des Wischens an abfangen möchten, können Sie MotionEvent.ACTION_MOVE verwenden und den ersten zu vergleichenden Wert speichern
quelle
Toast.makeText(MainAcivity.this, "top to down" + increaseValue, Toast.LENGTH_SHORT).show();
sie. Wie mache ich einen einzelnen Schlag, um die Werte min = 0 und max = 10 hinzuzufügen?das sollte dir vielleicht helfen ...
quelle
Kurze und einfache Version:
1. Erstellen Sie zuerst diese abstrakte Klasse
2. Erstellen Sie dann eine konkrete Klasse, die implementiert, was Sie benötigen:
quelle
Hier ist ein generischer Swipe-Left-Detektor für jede Ansicht in Kotlin mithilfe der Datenbindung
und dann, um es in Ihrem Layout zu verwenden:
quelle
quelle
Die beste Antwort ist @Gal Roms. Es gibt weitere Informationen dazu: Berühren Sie das Ereignis, um zuerst zu den untergeordneten Ansichten zurückzukehren. und wenn Sie für sie den onClick- oder onTouch-Listener definieren, erhält die parnt-Ansicht (z. B. Fragment) keinen Touch-Listener. Wenn Sie in dieser Situation den Swipe-Listener für Fragment definieren möchten, müssen Sie ihn in einer neuen Klasse implementieren:
Ich habe die Klasse von @Gal Rom geändert. So kann es sowohl das Wischen nach rechts als auch nach links erkennen und gibt nach dem Erkennen onInterceptTouchEvent true zurück. Dies ist wichtig, da untergeordnete Ansichten möglicherweise ein Ereignis erhalten, wenn wir dies manchmal nicht tun, und sowohl Swipe für Fragment als auch onClick für untergeordnete Ansicht (zum Beispiel) ausgeführt werden und einige Probleme verursachen. Nachdem Sie diese Klasse erstellt haben, müssen Sie Ihre Fragment-XML-Datei ändern:
Sie sehen, dass das begin-Tag die Klasse ist, die wir erstellt haben. jetzt in Fragmentklasse:
Es ist etwas kompliziert, funktioniert aber perfekt :)
quelle
Sie sollten eine Klasse aus erweitern
View.OnTouchListener
und dieonTouch
Methode behandeln, indem Sie sie überschreiben.Sie können es einfach so in Ihrem
Activity
oder implementierenFragment
.quelle