分析:View.OnTouchListener与GestureDetector.OnGestureListener的区别
我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN(按下屏幕), ACTION_MOVE(按下屏幕后移动受力点), ACTION_UP(松开屏幕)和ACTION_CANCEL(不会由用户直接触发)。借助对于用户不同操作的判断,结合getRawX()、 getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。
OnTouchListener只能监听到三种触摸事件,即按下,移动,松开,如果想要监听到双击、滑动、长按等复杂的手势操作,这个时候就必须得用到OnGestureListener了。
View.OnTouchListener
public interface OnTouchListener {
boolean onTouch(View var1, MotionEvent var2);
}
GestureDetector.OnGestureListener
public interface OnGestureListener {
// onDown 用户轻触屏幕,由1个MotionEvent ACTION_DOWN触发
boolean onDown(MotionEvent var1);
// onShowPress 用户轻触屏幕,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发,
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
void onShowPress(MotionEvent var1);
// onSingleTapUp 用户(轻触屏幕后)松开,由一个1个MotionEvent ACTION_UP触发
boolean onSingleTapUp(MotionEvent var1);
// onScroll 用户按下屏幕,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
boolean onScroll(MotionEvent var1, MotionEvent var2, float var3, float var4);
// onLongPress 用户长按屏幕,由多个MotionEvent ACTION_DOWN触发
void onLongPress(MotionEvent var1);
// onFling 用户按下屏幕、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
boolean onFling(MotionEvent var1, MotionEvent var2, float var3, float var4);
}