以前只知道控件的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 = new SimpleOnGestureListener(){ @Override public boolean onSingleTapUp(MotionEvent e) { return super.onSingleTapUp(e); } @Override public void onLongPress(MotionEvent e) { super.onLongPress(e); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return super.onScroll(e1, e2, distanceX, distanceY); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return super.onFling(e1, e2, velocityX, velocityY); } @Override public void onShowPress(MotionEvent e) { super.onShowPress(e); } @Override public boolean onDown(MotionEvent e) { return super.onDown(e); } @Override public boolean onDoubleTap(MotionEvent e) { return super.onDoubleTap(e); } @Override public boolean onDoubleTapEvent(MotionEvent e) { return super.onDoubleTapEvent(e); } @Override public boolean onSingleTapConfirmed(MotionEvent e) { return super.onSingleTapConfirmed(e); } };
只有理论没有实践,怎么行呢?这里我也写了一个Demo,这个Demo是我从另一篇博客中抄的,文章的内容也是参考他的博客写的,下面会把大神的那篇博客地址贴出来。
参考资料:Android GestureDetector用户手势检测实例讲解
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android手势操作识别详解,包括了Android手势操作识别详解的使用技巧和注意事项,需要的朋友参考一下 首先,在Android系统中,每一次手势交互都会依照以下顺序执行。 1. 接触接触屏一刹那,触发一个MotionEvent事件。 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。 3. 通过GestureDete
本文向大家介绍Android GestureDetector手势滑动使用实例讲解,包括了Android GestureDetector手势滑动使用实例讲解的使用技巧和注意事项,需要的朋友参考一下 Gesture在 ViewGroup中使用 GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等。 使用GestureDetector分三步: 1. 定义GestureDetect
本文向大家介绍Android手势识别功能,包括了Android手势识别功能的使用技巧和注意事项,需要的朋友参考一下 现在智能手机基本都是触摸操作,点击按钮是一种交互方式,同时手势相关的操作,比如滑动等等同样是很重要的交互方式。这篇文章是对安卓手势交互相关知识点的整理和总结,主要来源基于官方文档。 触摸交互中的概念 常用事件 首先要了解一些常用的事件: ACTION_DOWN:第一个手指按下 ACT
本文向大家介绍Android触摸及手势操作GestureDetector,包括了Android触摸及手势操作GestureDetector的使用技巧和注意事项,需要的朋友参考一下 现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘、无鼠标的手机系统带来了很多的便利。当用户触摸屏幕时会产生很多的触摸事件,down、up、move等等。View类有个Vie
本文向大家介绍iOS UIPan手势识别器,包括了iOS UIPan手势识别器的使用技巧和注意事项,需要的朋友参考一下 示例 平移手势识别器可检测到拖动手势。以下示例将图像添加到视图控制器,并允许用户在屏幕上四处拖动图像。 目标C 迅速 注意:尽管UIPanGestureRecognizer对于检测任何拖动手势很有用,但是如果您只想检测基本手势(例如用户向左/向右或向上/向下拖动手指),请使用UI
本文向大家介绍Android GestureDetector用户手势检测实例讲解,包括了Android GestureDetector用户手势检测实例讲解的使用技巧和注意事项,需要的朋友参考一下 一、概述 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。 一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onT