1 实例化GestureDetector,传入的参数是context和onGestureListener
mGestureDetector = new GestureDetector(this,new MyGestureDectorListener());
2 写一个类MyGestureDetectorListener实现onGestureListener接口,实现里面的各个抽象方法
public class MyGestureDectorListener implements GestureDetector.OnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
//刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
Log.d("sjx","onDown");
return true;
}
@Override
public void onShowPress(MotionEvent e) {
//手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
Log.d("sjx","onShowPress");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
//手指离开触摸屏的那一刹那。
Log.d("sjx","onSingleTapUp");
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// 手指在触摸屏上滑动。
Log.d("sjx","onScroll");
return false;
}
@Override
public void onLongPress(MotionEvent e) {
//手指按在持续一段时间,并且没有松开。
Log.d("sjx","onLongPress");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//手指在触摸屏上迅速移动,并松开的动作。
Log.d("sjx","onFling");
return false;
}
}
在GestureDetector中有个对onGestureListener的空实现SimpleOnGestureListener类,并且这个类同样实现了OnDoubleTapListener,OnContextClickListener,提供了双击的监听事件,我们可以直接继承这个类,然后实现某几个需要的方法。
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
4 经过测试:
1)轻点一下activity会调用 onDown --> onSingleTapUp
2)稍微长一点的点击(介于轻点和长按之间的点击)会调用 onDown --> onShowPress -->onSingleTapUp
3)长按 会调用 onDown -->onShowPress -->onLongPress
4)在Activity上滑动,并且在滑动的终点时手指没有立即离开屏幕 onDown -->onShowPress -->onScroll(多个)
5)在Activity上滑动,并且在滑动的终点时手指迅速离开屏幕 onDown --> onShowPress --> onScroll (多个)-->onFling
6)在Activity上迅速滑一下会调用 onDown -->onScroll(多个)-->onFling