Android手势识别器GestureDetector使用详解

所属分类: 软件编程 / Android 阅读数: 24
收藏 0 赞 0 分享

以前只知道控件的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 HapticFeedback(震动反馈)

下面小编就为大家带来一篇老生常谈Android HapticFeedback(震动反馈)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详谈OnTouchListener与OnGestureListener的区别

下面小编就为大家带来一篇详谈OnTouchListener与OnGestureListener的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿知乎悬浮功能按钮FloatingActionButton效果

前段时间在看属性动画,恰巧这个按钮的效果可以用属性动画实现,下面通过本文给大家分享adroid仿知乎悬浮功能按钮FloatingActionButton效果,需要的朋友参考下吧
收藏 0 赞 0 分享

解决Android V7后自定义Toolbar、ActionBar左侧有空白问题

这篇文章主要介绍的Android V7后自定义Toolbar、ActionBar左侧有空白问题的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android常见控件使用详解

这篇文章主要为大家详细介绍了Android常见控件的使用方法,包括ProgressBar进度条控件、AlertDialog对话框控件等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android实现简洁的APP更新dialog数字进度条

这篇文章主要为大家详细介绍了Android实现简洁的APP更新dialog数字进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 判断当前语言环境是否是中文环境

本文主要介绍了Android 判断当前语言环境是否是中文环境的方法。具有很好的参考价值。下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详谈Android中Matrix的set、pre、post的区别

下面小编就为大家带来一篇详谈Android中Matrix的set、pre、post的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现登录界面记住密码的存储

这篇文章主要为大家详细介绍了Android SharedPreferrences实现登录界面记住密码的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 使用SharedPreferrences储存密码登录界面记住密码功能

Android存储方式有很多种,在这里所用的存储方式是SharedPreferrences, 其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,下面通过实例代码给大家讲解下,需要的朋友参考下吧
收藏 0 赞 0 分享
查看更多