I am currently using dispatchTouchEvent to grab touch events, is there an easy way to distinguish between a click and a "drag" stylt gesture?
Asked
Active
Viewed 4,638 times
2 Answers
1
DispatchTouchEvent
is called with a MotionEvent
parameter. Method getAction
within MotionEvent
can return
- ACTION_DOWN
- ACTION_MOVE
- ACTION_UP
- ACTION_CANCEL
Then set on ACTION_DOWN flag isClick. If there is ACTION_MOVE clear isClick flag.
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
isClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isClick) {
//TODO Click action
}
break;
case MotionEvent.ACTION_MOVE:
isClick = false;
break;
default:
break;
}
return true;
}
-
2Seems like no matter how brief I tap, the action move event always get's fired. – JeffRegan Jun 26 '14 at 19:18
-
Check my other answer which introduces a movement threshold before setting isClick to false: http://stackoverflow.com/a/16485989/1373248 – MSquare Jun 27 '14 at 10:27
-
I implemented a similar solution yesterday. You might want to update this answer. – JeffRegan Jun 27 '14 at 14:43
-
This will not reliably work because small twitches in the finger will trigger `ACTION_MOVE` thus nullifying your click action. – user2968401 Sep 01 '15 at 03:18
-
@user2968401: True! You cam implement move threshold : http://stackoverflow.com/questions/4324362/detect-touch-press-vs-long-press-vs-movement/16485989#16485989 – MSquare Sep 01 '15 at 08:31
0
set up a threshold limit.When you move the pointer within a small range make it recognized as a click or else a movement

Nishain de Silva
- 141
- 2
- 6