为了账号安全,请及时绑定邮箱和手机立即绑定

Android事件分发 浅记

标签:
Android

个人理解,如果有不对的地方欢迎指正。
首先事件分发,事件是什么?我觉得简单讲就是人对手机发出的命令,也就是手指 触屏 的操作。那么分发呢?手指触屏首先应该是手机的硬件先感应到(触控传感器 我瞎说的呵呵哒)然后硬件把信号给系统?好了,这些我也不懂别瞎说了,总之我们的app接受到了手指触屏的事件,事件首先由window分发给根布局也就是rootview。我们基本上从这里控制事件就能满足大部分需求。来看个图:图片描述

这里我们捋一下控件的包含关系 :rootview包含viewgroup包含view
事件分发的顺序就是rootview--->viewgoroup--->view 这个是定好的规则不多解释。另外一点,假如说我的手指点的是view的上方,没点到view,那事件是不会发给view的。

说到这里基本上是说了个思路,那具体是怎么分发的呢。不管是什么类型view都有一个方法

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        return super.dispatchTouchEvent(event);
    }

这个方法就是事件分发的关键了,例如rootview遍历它的一级子控件(如上图所画,那view就不算是rootview的一级子控件了),如果有子控件满足条件,就调用子控件的dispatchTouchEvent(MotionEvent event)方法,那么事件就发给它的子控件了。那什么是满足条件呢,比如最基本的条件,手指点的位置要和子控件有重合(大白话就是我最起码要点到子控件上吧!)。同理一级子控件再遍历它自己的一级子控件........事件就一级一级的分发下去了。另外
事件的信息(比如说触屏的位置,触屏的动作是按下还是弹起等等)就用MotionEvent event这个对象包装好了,用于使用。

另外说到事件的分发,就不得不说事件的消耗。事件是先分发再消耗,分发到不能分发了才开始消耗!!!还是刚才的图,比如事件发给view了,view开始要分发事件,遍历子控件.....等等它没有也不能有子控件啊!这个时候事件分发就结束了,这个时候才开始事件的消耗处理!
还有事件的控制等等.....以后有机会再写,内容还是比较多的。

点击查看更多内容
11人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消