標籤:
前言:
(1)在自訂view的時候經常會遇到事件攔截處理,比如在側滑菜單的時候,我們希望在側滑菜單裡面有listview控制項,但是我們希望既能左右滑動又能上下滑動,這個時候就需要對觸摸的touch事件進行攔截。這個時候我們就需要明白android touch 事件傳遞機制,
(2)以前很多時候比較模糊,也許是網上看到也有很多事件傳遞的相關文章,但我看著頭暈,解釋不徹底,有的說得一半,總算不滿足不滿意,於是據我自己的理解來徹底的來整理下具體的是怎麼個傳遞方式,分享給大家,希望大家看到有什麼不對的地方及時提出糾正。謝謝?
測試布局:
這是本次理解android touch 事件傳遞機制的布局檔案
傳遞機制視圖:?
?
(1)android touch 事件傳遞機制,由於網頁原因會被展開,請大家單獨將該圖在另一個視窗開啟查看。
(2)事件是從Activity觸發事件然後傳遞到布局檔案,一層一層的往子容器傳遞到最底層的view,如果每層布局檔案未對該事件進行處理或者消費那麼該事件會從最底層開始往上傳到Activity進行消費。
(3)那麼事件的發起是由Activity介面的touch事件發起傳遞到布局視圖,但是該視圖只是描述了布局檔案或者view的相關事件傳遞機制,Activity事件沒有進行描述,但是在下面測試中會涉及Activity相關事件傳遞來解釋心中些許疑惑
事件傳遞另一個角度解釋:
一、每個View的子類都具有下面三個和TouchEvent處理密切相關的方法:
(1)public boolean dispatchTouchEvent(MotionEvent ev) ?分發TouchEvent
(2)public boolean onInterceptTouchEvent(MotionEvent ev) 攔截TouchEvent
(3)public boolean onTouchEvent(MotionEvent ev) 處理TouchEvent
二、?android touch 事件傳遞機制可以總結如下規律
(1)一個事件由使用者點擊觸發開始順著箭頭的方向進行傳遞,直到任意一個結束點結束事件傳遞。
(2)那麼事件傳遞可以由A傳到B,B可以不傳到C,B不進行分發,那麼就從B再傳回A進行消費然後結束,也可以由B傳到C然後傳遞D,或者不傳到D進行消費或者傳到父容器進行消費。
(3)忘掉以前的各種
?
?
?
?
?
?
Android touch 事件傳遞機制