Ich habe eine Taste und einen OnTouchListener daran angeschlossen. Wie kann ich herausfinden, ob die Bewegung (wenn der Benutzer den Knopf drückt) innerhalb oder außerhalb der Bewegung passiert? Sowohl event.getAction () als auch event.getActionMasked () geben nur 0, 1 oder 2 zurück, also ActionDown, ActionUp, ActionMove. Es gibt eine konstante MotionEvent.ACTION_OUTSIDE, die 4 ist, aber irgendwie erhalte ich sie nicht, auch wenn ich Touch außerhalb der Schaltfläche ziehe - ich erhalte immer noch 2 von beiden Methoden. Was ist das Problem?
UPD: Ich habe eine gute Lösung gefunden - überprüfe den fokussierten Zustand in der Ansicht nach ACTION_UP. Wenn es nicht fokussiert ist, bedeutet dies, dass die Bewegung außerhalb der Ansicht stattgefunden hat.
Dieses Flag gilt nur für Windows, nicht für Ansichten. Sie erhalten ACTION_MOVE
, wenn Sie Ihren Finger von der Ansicht wegbewegen, bleibt das Ereignis in der Ansicht, von der es stammt. Sehen Sie sich den Quellcode für SeekBar
an, wenn Sie eine Klarstellung benötigen: Auch wenn Sie Ihren Finger von der Leiste bewegen, zieht der Daumen immer noch nach!
Verwenden Sie hierzu FLAG_WATCH_OUTSIDE_TOUCH
funktioniert gut.
Wenn OnTouchListener
auf Button
steht, erhalten Sie Bewegungsereignisse nur innerhalb von Button
. Das MotionEvent.ACTION_OUTSIDE
wird nur aufgerufen, wenn das Bewegungsereignis zuerst außerhalb der Grenzen von View
liegt, und Sie sollten es wie ein ACTION_UP
behandeln.
Tags und Links android motion-detection