提問
1?手指1 2 3 4?依次按下 mFirstTouchTarget?結(jié)構(gòu)是一個什么樣情況
2?手指4?按下時只锻,為啥手指 1 2 3?對應(yīng)view接收不到事件分發(fā)了
安卓事件分發(fā)是基于多點觸控
來分析下ViewGroup的成員變量mFirstTouchTarget
private TouchTarget mFirstTouchTarget;? //First touch target in the linked list of touch targets.
TouchTarget是一個鏈表結(jié)構(gòu)油航,?來解決多點觸控問題
當手指點擊到某view上,并成功處理down事件,那么會執(zhí)行下面這個方法
?addTouchTarget(child, idBitsToAssign);? //mFirstTouchTarget被賦值
最開始 mFirstouchTarget =null
1?當手指1按下時候 ,? 創(chuàng)建 target1????target1.next=null????mFirstouchTarget = target1
2?當手指2按下時候 ,? 創(chuàng)建 target2????target2.next=?target1????mFirstouchTarget = target2
3 當手指3按下時候 娩梨,? 創(chuàng)建 target3? ? target3.next=?target2????mFirstouchTarget = target3
4 當手指4按下時候 ,? 因為沒點到任何子view?所以不會創(chuàng)建 target? ?mFirstouchTarget = target3
mFirstouchTarget =? target3?→target2→target1→null? 鏈表結(jié)構(gòu)
在回過頭來看看mFirstouchTarget注釋: First touch target in the linked list of touch targets? ?
官方說mFirstouchTarget?是 targets鏈表集合的第一個target?哦?對滴
到此問題1解決
圖1-1中手指4按下不動
mFirstTouchTarget = null
接著手指1按下 viewgroup?接收到?ACTION_POINTER_DOWN事件
根據(jù)圖1-4邏輯發(fā)現(xiàn)始終被viewgroup攔截?
所以?在viewgroup中第一次的down事件沒有點到子view览徒,點到group并且不動狈定,?后續(xù)子view就不會接收到任何事件了
在這個過程還有一個 局部變量?TouchTarget newTouchTarget?也是很重要的需理解