( 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

