“哎哟!蛮吊的” 之 Android GestureDetector详解

这篇文章主要告诉部分对GestureDetector类不熟悉的开发者需要注意的一些细节,不是有一个名人说了一句屁话吗:“细节决定成败!”。屁话我就不多说了,直接开撸了哈!

GestureDetector类内部主要包含了两个接口,一个外部类。而其内部的这个外部类其实就是这个两个接口的简单实现,毕竟还是为了快速的使用嘛!I Belive You Know!

具体点说两个内部接口是:OnGestureListener,onDoubleTapListener,提供的外部类是:simpleOnGestureListener。


本来呢,我应该装个B用编辑器写个简单的手势程序,然后根据手势打出Log,然后根据log截图,从而一步步告诉你推论。但是,因为这个B太多人装了,所以就不装了,我直接简单的说一下。当然,对于一些需要特别注意的细节,我会用红色字体给你提醒!


OnGestureListener接口包含了6个函数,因此你必须实现他们:

(1)只要你的手拇指落到了屏幕上,首先就会调用这个方法!

public boolean onDown(MotionEvent e);
(2)只要落在屏幕上的手指没有马上离开屏幕,就会调用这个方法!

public void onShowPress(MotionEvent e) 

(3)只要落在屏幕上的手指在屏幕上保持一定时间(这个时间肯定比上面onShowPress()久一些)),就会调用这个方法!

public void onLongPress(MotionEvent e

赠送一个结论:所以你长按屏幕中的一个地方,他发起的手势函数结构是,onDown->onShowPress->onLongPress.

当然,这个时候你要说如果你喜欢秒点击,或则短暂点击,又是个什么结构?你不要慌!慌也求没的用!

(4)手拇指在落到屏幕的一瞬间就抬起拇指,说话:秒点击,还是这个话好用!

public boolean onSingleTapUp(MotionEvent e)
再赠送一个结论:所以秒点击屏幕中的一个地方,发起的手势函数结构是,onDown->onSingleTapUp-> . onSingleTapConfirmed    !!!!!

我知道这个时候你要问我onSingleTapConfirmed是个什么卵!你不要慌,后面你就晓得了!这个时候我觉得还是有一些心比较细的同学问,那老子不秒点,要停留一丢丢再抬起手拇指呢?狗日的问的太好了!这个时候的手势接口图就成了:onDown->onShowPress->onSingleTapUp->.onSingleTapConfirmed!!!!


至于最后剩余的两个函数:onScroll(),onFling()我们就要稍微讲解一下了!

(5)只要你手拇指在屏幕上滑动了,那么在滑动过程中就一定会调用这个方法!

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
(6)只要你手拇指在屏幕上 快速滑动了,那么在滑动完毕后抬起爪爪的时候就一定会调用这个方法!

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
在这里呢! 我想稍微再强调一下onScroll()和onFling()的区别!记住一句话,只要有滑动就有onscroll(),但是一定要速率比较高才会再抬起手指的瞬间调用onFling()函数!如果不相信你也可以自己测试一下程序!


OnDoubleTapListener接口包含了3个函数,而这个接口主要还是针对手势的双击操作!

(1)如果你的手势只是点击一下屏幕(包括了秒点击和短暂点击)然后抬起手指,而不是快速的双击屏幕,那么就一定会调用这个方法:

public boolean onSingleTapConfirmed(MotionEvent e) 

正如这个函数的名字一样,其目的就是为了确定你的此次手势操作仅仅只是单次操作!而不是双次操作!进而确定了不会调用双击操作的对应函数!!! 我也相信现在的你能够明白上面击屏幕为什么最后会调用一个onSingleTapConfirmed()的原因了吧!!!哈哈!


(2)只要你快速的双击了屏幕,并且再第二次点击到屏幕的一瞬间就会调用这个方法:

public boolean onDoubleTap(MotionEvent e) 

(3)当你双击屏幕的时候,特别是第二次当你碰触屏幕之后,那么这个时候你还是会有动作的吧!要么你把手抬起来,或则滑动一段距离再抬起来,都可以撒!这个函数其实就是触碰到屏幕之后的动作响应!而经过个人测试,这个函数只是短暂的会响应一小段时间,大概也就1S,而且内部并没有再具体的分析后续的手势,所以感觉作用不大,至少我没有怎么用哈!当然,之所以敢说作用不大,也是因为第二次的手势只会伴随部分onDown,onShowPress,onLongPress手势的响应,但是滑动一类的手势就没有响应了,所以说作用不大哈!

public boolean onDoubleTapEvent(MotionEvent e) 

最后再赠送两个结论:

1:快速的双击结构图:onDown->onShowPress(可有可无)->onSingleTapUp->onDoubleTap->..可有可无(onDoubleTapEvent)..->onDown->..可有可无(onDoubleTapEvent)..

2:在第二次手势带有滑动操作的双击结构图:onDown->onShowPress(可有可无)->onSingleTapUp->onDoubleTap->onDoubleTapEvent->onDown->.......可有可无(onDoubleTapEvent).......->onShowPress->.......可有可无(onDoubleTapEvent).......->onLongPress->.......可有可无(onDoubleTapEvent).......

还有一个值得大家注意的点:onSingleTapUp和OnSingleTapConfirmed的区别!

A:前者的目的是为了确定此次手势操作是一个秒击或则短击,后则的目的是为了确定动作不是双击,仅仅只是一个单次的手势操作!

B:单击的情况下,两者的关系基本上一样,但是在双击的情况下,前者会在第一次点击时调用,后则却一定不会被调用-->总结一句话,前者在调用的情况下,后者不一定会调用,但是前者再不被调用的情况下,后者就一定不会被调用! 


至于最后还有一个simpleOnGestureListener类,其实就是前面两个接口的简单实现,只是为了开发这快速开发!我就不说了哈!

至此,我就讲完了我想说的!妈的!要去洗衣服了!不喜请勿拍脸哈!哈哈哈。。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值