//1、创建一个手势识别器
private GestureDetector mGestureDetector = new GestureDetector(getApplicationContext(),new MyOnGestureListener());
//3、将MotionEvent 事件传给GestureDetector处理
// MotionEvent 可以来自OnTouchEvent(MotionEvent event) 或者来自OnTouchListener的onTouch(View view,MotionEvent event);
// 这里使用来自OnTouchEvent(MotionEvent event)的效果是一样的
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
//将事件传递给了GestureDetector 然后它内部将事件进行判断识别 调用监听器中的对应方法
//最终实现事件的处理
}
//2、实现一个 手势识别器回到接口-----在里面处理各个手势对应的代码
public class MyOnGestureListener extends GestureDetector.SimpleOnGestureListener {
//触摸屏幕 点下 down
@Override
public boolean onDown(MotionEvent e) {
return super.onDown(e);
}
//手指抬起 单击 up
@Override
public boolean onSingleTapUp(MotionEvent e) {
return super.onSingleTapUp(e);
}
//手指抬起以后一段时间(很短的时间) 没有再点击 就会判定为只是单击确认
//如果 在等待的时间内又点击l一次 就是不会触发该方法 那就触发双击事件
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
// 点击事件的分类
//1、点击立即抬起 onDown -->onSingleTapUp -->onSingleTapConfirmed
//2、点击后没有滑动慢点抬起 onDown --> onShowPress--> onSingleTapUp -->onSingleTapConfirmed
//3、点击后没有滑动很长时间才抬起
//onDown --> onShowPress--> onLongPress-->onSingleTapUp -->onSingleTapConfirmed
@Override
public void onShowPress(MotionEvent e) {
super.onShowPress(e);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
// 双击的第二下Touch down时触发
@Override
public boolean onDoubleTap(MotionEvent e) {
return super.onDoubleTap(e);
}
// 双击的第二下Touch down和up都会触发,可用e.getAction()区分
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return super.onDoubleTapEvent(e);
}
// e1:第1个ACTION_DOWN MotionEvent
// e2:当前滑动到的位置的ACTION_MOVE MotionEvent
//distanceX distanceY xy方向滑动的距离 //在滑动的过程中多次调用
@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return super.onScroll(e1, e2, distanceX, distanceY); } @Override // e1:第1个ACTION_DOWN MotionEvent // e2:最后一个ACTION_MOVE MotionEvent // velocityX:X轴上的移动速度,像素/秒 // velocityY:Y轴上的移动速度,像素/秒 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return super.onFling(e1, e2, velocityX, velocityY); } @Override public boolean onContextClick(MotionEvent e) { return super.onContextClick(e); } }
这里有一个比较好的文章 : Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程)