-
onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑屏。用户按下触摸屏、快速移动后松开,由一个MotionEvent ACTION_DOWN、多个ACTION_MOVE、一个ACTION_UP触发
-
onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。无论是用手拖动View,还是以抛的动作滚动,都会多次触发这个函数,在ACTION_MOVE动作发生时就会触发该函数
手指触动屏幕后,稍微滑动后立即松开,触发顺序为:onDown --> onScroll -> onScroll -->…–>onFling
拖动的触发顺序为:onDown --> onScroll --> onScroll -->onfling
所以无论是滑屏还是拖动,影响的知识中间onScroll 被触发的数量而已,最终都是会触发onFling事件
示例
要使用GestureDetector,有四步要走:
(1)创建OnGestureListener()监听函数
可以构造实例:
GestureDetector.OnGestureListener listener = new GestureDetector.OnGestureListener() {}
也可以构造类:
private class gestureListener implements GestureDetector.OnGestureListener{}
(2)创建GestureDetector实例mGestureDetector
有下面三个构造函数:
GestureDetector gestureDetector = new GestureDetector(GestureDetector.OnGestureListener listener);
GestureDetector gestureDetector = new GestureDetector(Context context, GestureDetector.OnGestureListener listener);
GestureDetector gestureDetector = new GestureDetector(Context context, GestureDetector.SimpleOnGestureListener listener)
(3)在onTouch()中进行拦截:
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
(4)绑定控件
TextView v = findViewById(R.id.tv);
tv.setOnTouchListener(this);
下面来举一个例子,我们在主页面中添加一个TextView,并将其放大到整屏,方便在其上的手势检测。
xml:
<