Ich habe eine UX-Anforderung, dass der Benutzer einen Dialog
auslöst, indem er eine Zelle in GridView
lange drückt.
Während der Dialog
angezeigt wird, muss der Benutzer in der Lage sein, den Finger / Daumen auf dem Bildschirm zu bewegen ohne das UP/CANCEL
-Ereignis auszulösen, wenn sie die Grenzen von GridView
verlassen. Zelle.
Wenn der Benutzer den Kontakt mit dem Bildschirm endgültig unterbricht, möchte ich erfassen. GridView
scheint einige falsche Positive für UP/CANCEL
zu registrieren, die wir nicht mit anderen Ansichten sehen können.
Das Problem ist, dass die ursprüngliche Ansicht alle Berührungsereignisse erfasst, weil DOWN
von ihr erfasst wurde.
Der Dialog registriert / sieht bis nach dem UP-Ereignis keine Berührungen aus der ursprünglichen Ansicht.
Ich habe versucht, das ursprüngliche Berührungsereignis abzubrechen und dispatchTouch()
usw. zu verwenden. Keine Freude.
Irgendwelche Ideen?
Ich habe so etwas in einem meiner Projekte verwendet.
Weisen Sie jeder Zelle Ihrer gridView eine OnTouchListener
zu und überschreiben Sie die OnTouch-Methode.
Öffnen Sie den Dialog in der ausführbaren mLongPressed, die nur ausgeführt wird, wenn der Benutzer für eine Sekunde dieselbe Stelle berührt hat. Sie können die Entfernung, die er bewegen kann, und die Zeit, die er braucht, um sich als langen Klick zu registrieren, ändern. Ich würde jedoch empfehlen, getScaledTouchSlop () für die Entfernung zu verwenden.
%Vor%Wenn Sie diesen Code in meinem Projekt verwenden, kann der Benutzer seinen Finger über den gesamten Bildschirm bewegen, ohne dass ACTION_UP ausgelöst wird. Erst wenn er seinen Finger hebt, wird er ausgelöst.
Tags und Links android dialog gridview motionevent long-press