最新下载
热门教程
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 
Android手势识别器GestureDetector使用详解
时间:2022-06-25 23:27:08 编辑:袖梨 来源:一聚教程网
以前只知道控件的onTouchEvent()事件,它的动作有MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;今天有个需求,要监听控件的双击、拖动、滑动等事件,这时onTouchEvent()很明显不能满足我们的需求,经多方打听,找到了今天的主角GestureDetector,下面就对它进行简单的学习。
构造方法:
已过时的有2个,不推荐使用。
GestureDetector(GestureDetector.onGestureListener listener);
GestureDetector(GestureDetector.onGestureListener listener,Handler handler);
推荐使用。
GestureDeterctor(Context context,GestureDetector.onGestureListener listener);
GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler);
GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler,boolean unused);
参数handler主要用来执行延时操作时使用,参数unused暂时没有使用。
从构成函数可以看出,当我们需要创建一个GestureDetector对象时,必须给它传一个GestureDetector.onGestureListener对象,查看API之后,发现它是个接口(interface),创建GestureDetector.onGestureListener的对象时,必须实现一下几个方法:
1、onDown(MotionEvent e);
当用户按下时的回调。
2、onFling(MotionEvent e1,MontionEvent e2,float velocityX,float velocityY);
当用户快速拖动,并离开屏幕时,控件还在滑动的回调。
3、onLongPress(MotionEvent e);
当用户长按控件时的回调。
4、onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY);
当用户拖着控件(控件本身并没有动)滑动时的回调。
5、onShowPress(MotionEvent e);
当用户按下,还没有执行移动或者抬起的动作的回调。
6、onSingleTapUp(MotionEvent e);
用户按下,立即抬起,没有做其它动作时的回调。
有了这个监听之后,我们还可以给GestureDetector设置双击监听,使用的方法是:
mGestureDetector.setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleListener);
参数是双击监听的对象,GestureDetector.OnDoubleTapListener它也是一个接口(interface),创建它的对象时,也必须实现以下几个方法。
1、onDoubleTap(MotionEvent e);
当用户双击时回调。
2、onDoubleTapEvent(MotionEvent e);
双击间隔事件的回调。
3、onSingleTapConfirmed(MotionEvent e);
当用户单击时回调。
上面的两个监听,回调函数都是必须实现,有时候我们不需要监听所有的事件,只对自己感兴趣的事件进行监听,GestureDetector有个内部类帮我们实现此功能GestureDetector.SimpleOnGestureListener,该类实现了GestureDetector.onGestureListener、GestureDetector.onDoubleTapListener、GestureDetector.onContextClickListener这三个接口,并实现了它们的方法,只不过是空实现,在我们需要这三个接口的时候,我们可以创建GestureDetector.SimpleOnGestureListener对象,然后需要监听哪个事件,我们就重写它的哪个方法,下面我把它的所有方法都实现了,其实和上边两个接口实现的方法是一样。
| 代码如下 | 复制代码 | 
GestureDetector.SimpleOnGestureListener mGestureDetector =newSimpleOnGestureListener(){    @Override    publicbooleanonSingleTapUp(MotionEvent e) {     returnsuper.onSingleTapUp(e);    }    @Override    publicvoidonLongPress(MotionEvent e) {     super.onLongPress(e);    }    @Override    publicbooleanonScroll(MotionEvent e1, MotionEvent e2,      floatdistanceX,floatdistanceY) {     returnsuper.onScroll(e1, e2, distanceX, distanceY);    }    @Override    publicbooleanonFling(MotionEvent e1, MotionEvent e2,      floatvelocityX,floatvelocityY) {     returnsuper.onFling(e1, e2, velocityX, velocityY);    }    @Override    publicvoidonShowPress(MotionEvent e) {     super.onShowPress(e);    }    @Override    publicbooleanonDown(MotionEvent e) {     returnsuper.onDown(e);    }    @Override    publicbooleanonDoubleTap(MotionEvent e) {     returnsuper.onDoubleTap(e);    }    @Override    publicbooleanonDoubleTapEvent(MotionEvent e) {     returnsuper.onDoubleTapEvent(e);    }    @Override    publicbooleanonSingleTapConfirmed(MotionEvent e) {     returnsuper.onSingleTapConfirmed(e);    }   };  | |
只有理论没有实践,怎么行呢?这里我也写了一个Demo,这个Demo是我从另一篇博客中抄的,文章的内容也是参考他的博客写的,下面会把大神的那篇博客地址贴出来。
相关文章
- 三国天下归心武将怎么养成 武将养成攻略 11-04
 - 三国天下归心经济怎么提升 经济提升方法 11-04
 - 妇女节必点赞的朋友圈说说(精选90句) 11-04
 - 镭明闪击ssr角色怎么选 ssr角色选择推荐 11-04
 - 植物大战僵尸融合版雪兽骑士怎么样 雪兽骑士属性介绍 11-04
 - 植物大战僵尸融合版旅行模式关卡有哪些 旅行模式关卡介绍一览 11-04