美文网首页
事件分发---mFirstTouchTarget

事件分发---mFirstTouchTarget

作者: tk2525 | 来源:发表于2020-06-15 18:42 被阅读0次
1-1 一个viewgroup包含3个子view

提问
1 手指1 2 3 4 依次按下 mFirstTouchTarget 结构是一个什么样情况
2 手指4 按下时,为啥手指 1 2 3 对应view接收不到事件分发了

安卓事件分发是基于多点触控
来分析下ViewGroup的成员变量mFirstTouchTarget

private TouchTarget mFirstTouchTarget;  //First touch target in the linked list of touch targets.
TouchTarget是一个链表结构, 来解决多点触控问题

1-2

当手指点击到某view上,并成功处理down事件,那么会执行下面这个方法
 addTouchTarget(child, idBitsToAssign);  //mFirstTouchTarget被赋值

1-3

最开始 mFirstouchTarget =null
1 当手指1按下时候 ,  创建 target1    target1.next=null    mFirstouchTarget = target1
2 当手指2按下时候 ,  创建 target2    target2.next= target1    mFirstouchTarget = target2
3 当手指3按下时候 ,  创建 target3    target3.next= target2    mFirstouchTarget = target3
4 当手指4按下时候 ,  因为没点到任何子view 所以不会创建 target   mFirstouchTarget = target3
mFirstouchTarget =  target3 →target2→target1→null  链表结构
在回过头来看看mFirstouchTarget注释: First touch target in the linked list of touch targets   
官方说mFirstouchTarget 是 targets链表集合的第一个target 哦 对滴
到此问题1解决

1-4

图1-1中手指4按下不动
mFirstTouchTarget = null
接着手指1按下 viewgroup 接收到 ACTION_POINTER_DOWN事件
根据图1-4逻辑发现始终被viewgroup拦截 
所以 在viewgroup中第一次的down事件没有点到子view,点到group并且不动, 后续子view就不会接收到任何事件了

在这个过程还有一个 局部变量 TouchTarget newTouchTarget 也是很重要的需理解

相关文章

网友评论

      本文标题:事件分发---mFirstTouchTarget

      本文链接:https://www.haomeiwen.com/subject/gcdhxktx.html