GestureDetector 和SimpleOnGestureListener的使用和解释
16lz
2021-01-23
//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的使用教程)
更多相关文章
- Android Button 控件绑定单击事件
- Android中Touch事件的处理
- Android03_事件处理
- android 事件流转机制
- 【android基础】之Android返回键处理(事件)
- Android事件分发