ViewGroup的事件传递、分发

ViewGroup事件传递、分发

(注:本文旨在相互印证,探讨,因为我也是总结自己的想法,可能有错误的地方,希望有前辈发现问题能帮我指正,感谢!)

1)

  • 1.1)事件由根布局向内(顶)层传递

在这里插入图片描述

  • 1.2)大致传递过程:

view :
1.dispatchTouchEvent
2.onTouch (touchListener)
3.touchEvent (包含其他事件,如click)

viewGroup:
1.dispatchTouchEvent
2.onInterceptTouchEvent
3.onTouch
4.touchEvent

(补充:viewGroup extends View !)

  • 2) 事件先由根布局ViewGroup接收:dispatchTouchEvent

  • 2.1) 先判断是否是按压事件,如果是,初始化参数

在这里插入图片描述
其中有很多过程,我拿出了一个对下文比较重要的一个参数:
mFirstTouchTAarget 一定会被制为null。

  • 2.2) 紧接着,确定当前ViewGroup是否被拦截。

在这里插入图片描述

  • 2.2.1) 如果不是则事件继续向下传递,(内容转接 下文 标题3))

  • 2.2.2) 如果被拦截,则会把当前的ViewGroup当作一个View处理,调取

super.dispatchTouchEvent();

在这里插入图片描述

其中dispatchTransFormTouchEvevt方法中,当传递的child为null时,会直接调取基类的dispatchTouchView方法

在这里插入图片描述

  • 3)

如果viewGroup 的拦截器中(我就那么一叫.),没有设置拦截,那么他默认是false,就会判断当前的ViewGroup的按压地方,存在几个View(就像最上面的xml布局图中,button1,与 button2,有一块重叠的部分,当点击这个部分的时候,两个child都会被分发到事件)

在这里插入图片描述

图中的代码是被删减过的,我把其中的主干提出来了。

  • 3.1 )

获取按压中的子view,并从上自下,顺序排列。也就是说,等下分发按压事件的时候,会先分发给button2这个按钮

  • 3.2)分发事件:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值