( will try responding at the bottom for a change )

21 января 2012 г. 2:38 пользователь skink <[email protected]> написал:

>
>
> Kostya Vasilyev wrote:
> > Have you tried using MotionEvent.ACTION_CANCEL in the double-tap
> listener?
> >
> > GestureDetector has code to reset its internal state in response to this:
> >
> >
> https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/GestureDetector.java#L594
> >
> > I'm thinking you'd need post a handler message to self to get out of the
> > current stack state when onDoubleTap is called, and then in response to
> > that message, use ACTION_CANCEL to reset the gesture listener and then
> > start the activity.
> >
> > -- Kostya
> >
>
> Kostya,
>
> do you mean that in onDoubleTap (MotionEvent e) listener I should
> modify "e" by:
>
> e.setAction(MotionEvent.ACTION_CANCEL)
>
> and then "feed" gesture detector with that modified event?
>

No, that won't get you out of the call chain that exists when your
onDoubleTap is called:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/GestureDetector.java#L488

There is code in GestureDetector's onTouchEvent after the call to
onDoubleTap, and replacing the event's action will do nothing to skip it.
The switch at line 468 won't go back to be re-evaluated, etc.



>
> but if it cancels internal state of detector why to use a Handler?
>

To return from your onDoubleTap listener to the gesture detector's
onTouchEvent, let it execute the rest of its code, and only then send the
cancel event to reset its state.


>
> btw I already tried in  onDoubleTap to post Runnable that starts
> activity and it worked well but I decided it's dirty workaround -
> that's why I used onDoubleTapEvent
>

That's pretty similar to what I was suggesting, and also unwinds the call
chain from the double-tap listener call.

Perhaps the framework sends a cancel event in this case -- or perhaps your
letting go after the double tap has time to register.

I'd do a test to find out, keeping the finger down after the double-tap's
second touch.

If the gesture detector still works Ok after returning back to this
activity (like your original email mentioned), good.

If it doesn't, it would mean that you were just getting lucky with the
timing of the second up event, and that sending a cancel is still necessary.

Hope this makes sense.

-- Kostya


>
> pskink
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to