接到上面的話題來講钙皮,我們繼續(xù)講勇吊;我們都知道曼追,viewgroup與view之間是組合關系;打個不確定的比方汉规,viewgroup是一家子的家長礼殊,view是家庭成員,只有一家之主在鲫忍,那么才能把膝下的孩子聚集起來了;雖然不夠確切钥屈,但是我還是打比方下去悟民,一家子作為社會的成員總要交糧納稅,那么作為官府我不管是誰納稅篷就,總之交了糧射亏,他就認為你這家納稅了,然而這家子誰納了糧那是個大問題竭业,要是家庭成員都不納糧智润,那么只有自己納,這責任還是自己扛未辆;
對一家之主就是viewgroup窟绷,如果子視圖都沒有消費事件了,那么它只能分發(fā)給自己消費咐柜,他會調用super.dispatchTouchEvent(event)方法自己分發(fā)給自己兼蜈,viewgroup是繼承view,那么它其實調用的是view對象的
dispatchTouchEvent(event)拙友,到此接下來分析一下view的disaptchtouchenvent方法为狸;
相對于viewgroup的disaptchtouchenvent方法view的disaptchtouchenvent邏輯鏈條就短的多,因為最復雜的分發(fā)機制已經被viewgroup處理了遗契;
第一步和viewgroup的disaptchtouchenvent方法一樣辐棒,是檢查是否過濾此事件,這里就不過多說明了,具體的請查看這篇文章http://www.reibang.com/p/8b73f18babb3漾根;在這步驟之前泰涂,優(yōu)先檢查event.isTargetAccessibilityFocus,如果是true,那么繼續(xù)判斷requestAccessibilityFocus申請者是不是自己,如果不是自己立叛,那么直接返回false负敏,不繼續(xù)分發(fā)下去了,既然講到AccessibilityFocus秘蛇,我們就說說這個特性其做,它相當給指定view開了優(yōu)先選擇特權,但是在viewgroup上是不起作用的赁还,為啥妖泄,請看代碼
if (ev.isTargetAccessibilityFocus() && isAccessibilityFocusedViewOrHost()) {
? ? ev.setTargetAccessibilityFocus(false);
}
言歸正傳,接下去繼續(xù)看下去艘策,第二步判斷是否設置enable標記蹈胡,具體看setEnabled的方法,如果是(默認是設置的)并且響應鼠標拖動朋蔫,那么可以說是消費事件罚渐;第三步,該視圖設置了onTouchListener,那么調用其ontouch方法驯妄,如果返回true荷并,說明該監(jiān)聽響應了該事件;第四步青扔,以上兩個步驟都沒響應該事件源织,那么調用ontouchevent進行處理至此view的disaptchtouchenvent方法分析完畢,是不是很短微猖。