欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

android touch事件分发机制,androidtouch,所以自己总结了一下事件的

来源: 开发者 投稿于  被查看 95 次 评论:271

android touch事件分发机制,androidtouch,所以自己总结了一下事件的


看了网上那么多的博客 ,对于android系统的事件处理仍然不是明白的特别透彻,或者一些博客讲解的总是有些歧义或者讲诉的不正确或者不全面。所以自己总结了一下事件的传递机制希望可以帮助到广大的朋友。

  • 假设事件传送路径为A-B-C-D-E;

  • 一个手势是由事件action_down开始和action_move等其它事件以及事件action_up结束的集合;

  • 一个action_down意味着一个新的手势的开始,aciton_up意味着一个手势的结束;

  • 事件由activity的dispatchevent开始,通过调用子view(包括viewgroup)的dispatchevent向下传递,直到为一个view为止;

  • 之后事件会由最下层的view向上传递,由onTouchEvent进行处理,一直传递到activity的onTouchEvent; 

    • 首先框架层最先处理的是action_down事件,如果此事件在传递过程中没有被oninterceptEvent掉(返回true为阻止),那么此事件将一直传递到最下层;

    • 此时事件将开始由下开始往上传递,并且如果在途中某一层(假设为D)消费掉(即onTouchEvent返回true),那么此事件将终止向上传递,并且以后事件也会通过D的dispatchEvent方法直接调用onTouchEvent方法进行处理(事件传递顺序A-B-C-D);

    • 如果传递过程中没有任何onTouchEvent进行消费,那么以后此事件将直接由activity的onTouchEvent进行处理。这意味着如果你想在某一层处理手势,你务必要在该层消费action_down以确保以后可以接收到事件。

  • action_down事件处理结束后将开始其它事件的处理(以下事件都是除了action_down的事件);

  • 你可以在某一层的onInterceptEvent中随时决定是否终止向下传递事件,这取决于你的手势处理逻辑;onInterceptEvent之后你将永远不能在向下传递事件了。

  • requestDisallowInterceptTouchEvent将阻止viewgroup对事件进行中断;

  • 如果在某一层onTouchEvent处理某一事件,并进行消费掉,那么该事件将不会在向上传递;否则将继续向上传递。

20150522094647528.png

其它知识介绍: 
ViewConfiguration类保存了一些常量,是由框架层为我们生成的。 
1.其中getScaledTouchSlop 确定是否在滑动 
2.fling,是否快速滑动 
3.其它自己研究去吧。

目前先介绍到这里,后续在更新!


转载请注明出处:http://blog.csdn.net/ZhouLi_CSDN/article/details/45878337


用户评论