当前位置: 移动技术网 > 移动技术>移动开发>Android > Android手势识别器GestureDetector使用详解

Android手势识别器GestureDetector使用详解

2019年07月24日  | 移动技术网移动技术  | 我要评论

以前只知道控件的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用户手势检测实例讲解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网