Android事件分发机制里边,如果一个ViewGroup向子View分发事件,子View怎么判断是自己需要处理这个事件呀?
看源码ViewGroup好像是一个for循环对所有子View分发。那如果一个ViewGroup中有两个Button,Button1在屏幕左上角,Button2在屏幕右下角。点击了Button2,那Button1收到这个事件之后怎么判断出来这不是自己处理的事件,那事件Button2又怎么知道是自己处理这个触摸事件。
view.getId()根据id来判断
不是有坐标吗
不管什么编程语言,一般就两种事件机制
一种是冒泡的机制,一种是分发的机制
冒泡机制中,你点击一个控件,触发的就是控件本身的事件,控件可以选择自己处理,也可以选择将事件冒泡给它的父控件
在分发的机制中,由父控件先接收到事件,然后向所有子控件分发,父控件当然知道你点击的坐标是什么,每个子控件也知道自己的坐标是什么
在 ViewGroup 中的 dispatchTouchEvent 方法中,会对点击事件进行分发,会对点击目标进行选择
大致流程 可以在 ViewGroup 源码中搜索 newTouchTarget = getTouchTarget(child);
也可以参考我的一篇文章,里边有对源码的部分注释:
根据坐标和id判断