@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
Log.i(TAG, "get Sy" + getScrollY());
smoothScrollTo(0, 0);
return mGestureDetector.onTouchEvent(event);
case MotionEvent.ACTION_DOWN:
return mGestureDetector.onTouchEvent(event);
case MotionEvent.ACTION_MOVE:
return mGestureDetector.onTouchEvent(event);
default:
break;
}
return super.onTouchEvent(event);
}
GestureDetector.OnGestureListener 必须在
ACTION_UP,ACTION_DOWN,ACTION_MOVE全部传递事件给手势mGestureDetector.onTouchEvent(event);
1、只有
ACTION_UP和
ACTION_MOVE并且是抛滑:onFling方法调用,必须两个事件以前传递才有效;
2、只有
ACTION_UP :无方法调用;
3、只有
ACTION_MOVE :onScroll方法调用;
4、只有
ACTION_DOWN :onDown,onShowPress,
onLongPress方法调用;
5、只有
ACTION_DOWN,
ACTION_UP
并且onDown返回true :onDown,onShowPress,(
长按)onLongPress,(
点击)onSingleTapUp方法调用;
6、只有
ACTION_DOWN,
ACTION_UP
并且onDown返回false :onDown,onShowPress,onLongPress方法调用;
7、只有
ACTION_DOWN,
ACTION_MOVE并且onDown返回为true:onDown, onScroll 方法调用;
8、只有
ACTION_DOWN,
ACTION_MOVE并且onDown返回为false:onDown ,onShowPress,onLongPress 方法调用;
9、只有
ACTION_DOWN,
ACTION_UP,
ACTION_MOVE并且onDown返回为false:onDown ,onShowPress,onLongPress 方法调用;
10、只有
ACTION_DOWN,
ACTION_UP,
ACTION_MOVE并且onDown返回为true:onDown , onScroll ,
是抛滑onFling 方法调用;
总结:1、只有在
ACTION_DOWN调用是,onDown 返回true,才有可能调用onFling ,onScroll方法;
2、只有
ACTION_MOVE 调用是,onFling ,onScroll方法才回调用;
3、onFling方法调用,还取决
ACTION_MOVE 时调用;
4、(
点击)onSingleTapUp方法调用,只有
ACTION_DOWN,
ACTION_UP
并且onDown返回true ;