Ich habe eine benutzerdefinierte Ansicht, die von Ansicht abgeleitet ist. Ich möchte benachrichtigt werden, wenn auf die Ansicht geklickt wird und die x, y-Position, an der der Klick stattgefunden hat. Gleiches gilt für lange Klicks.
Sieht so aus, ich muss es überschreiben onTouchEvent()
. Gibt es jedoch keine Möglichkeit, den x, y-Ort des Ereignisses von einem OnClickListener
zu erhalten?
Wenn nicht, wie lässt sich dann gut feststellen, ob ein Bewegungsereignis ein "echter" Klick oder ein langer Klick usw. ist? Das onTouchEvent
erzeugt viele Ereignisse in schneller Folge usw.
false
damit Berührungsereignisse nicht blockiert werden? (View.OnTouchListener.onTouch gibt true zurück, wenn der Listener das Ereignis konsumiert hat, andernfalls false.)OnClickListener
ausgelöst wird, wenn der Finger losgelassen wird, alsoACTION_UP
mit Einschränkungen: Wenn eine fliegende (Wisch-) Geste ausgeführt wurde,OnClickListener
wird sie nicht ausgelöst, sondernACTION_UP
wird weiterhin verarbeitet.(event.getX(), event.getY())
zu schreiben, aber er schreibt nicht an der richtigen Position.Vollständiges Beispiel
Den anderen Antworten fehlen einige Details. Hier ist ein vollständiges Beispiel.
Zusammenfassung
OnTouchListener
OnClickListener
quelle
OnTouchEvent überschreiben (MotionEvent ev)
Dann können Sie tun:
Oder etwas ähnliches. Haben Sie eine Butches.
quelle
Sie können eine Erweiterungsfunktion in Kotlin wie folgt erstellen:
Wenn Sie einen langen Klick benötigen, ersetzen Sie ihn einfach
setOnClickListener
Ich verwende,
getLocationOnScreen()
weil ich Koordinaten für den ViewHolder von RecyclerView benötigequelle