Android自定义View基础--事件分发

在这里插入图片描述

从上图可以看出一个Activity的根View是DecorView,DecorView继承了FrameLayout,而FrameLayout 继承了ViewGroup。
所以我们搞明白ViewGroup与View的事件分发逻辑,及其dispatchTouchEvent与onInterceptTouchEvent还有onTouchEvent,其中onInterceptTouchEvent是ViewGroup独有的。搞明白这三个方法的调用关系,就明白了事件分发。下面用公司处理事物的方式来说明下事件分发,

图一:公司职务与ViewGroup和View的对应关系
在这里插入图片描述

图二:公司处理事物流程图
在这里插入图片描述
图三:Android事件分发模型(参考图二来看图三容易理解)

在这里插入图片描述

最后总结:
ViewGroup和View 的dispatchTouchEvent 是做事件分发,

一般情况下dispatchTouchEvent()一般不会用于重写, 它会自动分发给onInterceptTouchEvent(),如果onInterceptTouchEvent()的ACTION_DOWN 里面返回fasle就代表自己不处理这个事件,而是交给下一个去处理它,。

ViewGroup和View的onTouchEvent方法是做事件处理的,

1、自己消费掉,事件终结,不再传给谁----->return true;
2、继续从下往上传,不消费事件,让父View也能收到到这个事件----->return false;View的默认实现是不消费的。所以super==false。

ViewGroup的onInterceptTouchEvent方法对于事件有两种情况:

1、拦截下来,给自己的onTouchEvent处理—>return true;
2、不拦截,把事件往下传给子View---->return false,ViewGroup默认是不拦截的,所以super==false;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值