Android手势识别器GestureDetector

         以前只知道控件的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的对象时,必须实现一下几个方法:

             1onDown(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是我从另一篇博客中抄的,文章的内容也是参考他的博客写的,下面会把大神的那篇博客地址贴出来。

         参考资料:http://blog.csdn.net/harvic880925/article/details/39520901


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值