您的位置:首页 > 移动开发 > Android开发

Android进阶学习之路——View事件的传递机制

2015-08-02 10:45 609 查看
原理饶口令:事件阶段两步走、向下分发、向上传递、分发可拦截先分发,后传递,事件消费不传递

事件分发中重要的方法

dispatchTouchEvent 分发事件(只要触摸控件,就会调用控件的DispathTouchEvent方法)

onInterceptTouchEvent 拦截事件
OnTouch View类的抽象方法,让调用者去setOntouchListener的时候实现的方法
onTouchEvent View类自己的方法,复写View的时候,自己去覆盖父类的OnTouchEvent方法。

ViewGroup事件分发原理:

当点击屏幕的时候,获取手指在屏幕上的位置,然后调用当前Activity根布局ViewGroup的dispatchTouchEvent方法。

判断disallowIntercept(是否禁用掉拦截功能,默认false)或(!oninterceptTouchEvent(ev))为true (事件拦截):分发阶段

判断当前手指的点是否位于ViewGroup的子结点上(View或ViewGroup),

如果是则调用子结点的DisaptchTouchEvent方法
(事件向子控件分发):分发阶段

如果不是则调用自己父类(View)的DisapchTouchEvent方法,自己来消费当前事件,如果自己不消费当前事件,

则将事件传递至父控件进行处理,如果父控件也不处理,继续向上传递。
:传递阶段

代码详解







View的事件分发处理:

当自己的DisaptchTouchEvent方法被调用的时候





如果OnTouch返回True,那么就不会执行当前类的OnTouchEvent方法了。

如果当前方法返回true,表示消费掉当前的事件,那么事件也就不会再向上传递了。

OnTouchEvent详解





事件分发有几点需要理清楚的知识点:

事件分发中的View和ViewGroup区别。ViewGroup仅仅是负责事件分发的,和事件的传递。向子控件分发事件还是被传递从而调用自身(父类)的DispatchToucheEvent方法。
触摸到了任何一个控件,就一定会调用该控件的dispatchTouchEvent方法

如果子控件dispatchTouchEvent一直返回false,表示不消费当前的事件,那么之后事件会向上传递。
touch事件的层级传递: 如果在执行ACTION_DOWN时返回false,后面一系列其它的action就不会执行。简单的说:当dispatchTouchEvent时行事件分发的时候,只有前一个Action返回true。才会触发后一个Action。 下面是示意图









FLY:以上是自己在学习的过程中所做的笔记,如果有错误的言论或者有没说明白的欢迎评论。咱们共同学习、共同进步

相关学习的URL:/article/1562152.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: