Registrieren von UP / CANCEL im Dialog, wenn das DOWN-Ereignis von LongPress einer Ansicht ausgelöst wurde

8

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?

    
Bill Mote 21.10.2014, 15:45
quelle

1 Antwort

2

Ich habe so etwas in einem meiner Projekte verwendet.

Weisen Sie jeder Zelle Ihrer gridView eine OnTouchListener zu und überschreiben Sie die OnTouch-Methode.

%Vor%

Ö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.

    
Robbe 02.11.2014, 17:49
quelle