【Android】觸屏事件傳遞簡述

來源:互聯網
上載者:User

標籤:

一個典型的結構模型

ActivityA包含ViewGroupB,ViewGroupB包含ViewC,這裡選取ViewGroupB(中間節點)作為當前節點視角

過程一:當前節點與父節點的事件關係

ActivityA只關心ViewGroupB.onDispatchTouchEvent傳回值,只要在ACTION_DOWN分發過程中B.onDispatchTouchEvent()返回為true,那麼後續的事件都會向B分發。至於ViewGroupB在onDispatchTouchEvent方法中是怎麼處理的,父節點ActivityA並不會過問。

換句話說,父節點向直接子節點ViewGroupB兜售ACTION_DOWN事件,子節點使用onDispatchTouchEvent方法的傳回值進行應答,只要子節點表示能夠處理ACTION_DOWN,那麼父節點就會將後續事件持續交給子節點。

過程二:當前節點與子節點的事件關係

ViewGroupB從上一級收到ACTION_DOWN事件之後,會調用onInterceptTouchEvent判斷是否進行攔截。如果不攔截,那麼流程與上面的“過程一”一致,如果攔截,那麼ViewGroupB就吃掉事件,直接忽略ViewC。

不過onInterceptTouchEvent屬於內部方法,這個方法本身並不會影響當前節點的onDispatchTouchEvent傳回值。

onDispatchTouchEvent傳回值的判斷

通常情況下,一個節點的onDispatchTouchEvent傳回值只與當前節點的onTouchEvent傳回值和子節點的onDispatchTouchEvent傳回值有關:

this.onDispatchTouchEventValue = child.onDispatchTouchEventValue || this.onTouchEvent

當然,也可以強制給onDispatchTouchEvent賦一個傳回值,儘管如此,也不應該強制拋棄原有的事件機制,因為原有的事件機制會進行一些狀態清理等操作。

ACTION_DOWN樣本圖:

Android分享 Q群:315658668

【Android】觸屏事件傳遞簡述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.