Android中view的事件分發機制

1、View的事件分發涉及到 3個核心的方法,第一個是dispatchtouchevent,這個方法是用來進行事件分發,如果事件能夠 傳 遞 給 當 前 view, 那 麼 此 方 法 一 定 被 調 用 , 它 的 返 回 值 受 當 前 view 的 ontouchevent和下級 view的 dispatchevent的影響,表示是否消 耗當前事件;第二個方法是 oninterceptouchevent,這個方法在 dispatchtouchevent方法內部調用,用來判斷是否攔截某個事件,如 果 當 前 view 攔 截 了 某 個 事 件 , 那 麼 在 同 一 事 件 序 列 中 , 此 方 法 不 會 再;次被調用,返回的結果表示是否攔截當前事件;第三個方法是 ontouchevent,這個方法也是在 dispatchtouchevent方法中調用, 用來處理點擊事件,返回的結果表示是否消耗當前時間,如果不消耗,同 一 事 件 序 列 中 , 當 前 view 無 法 再 次 接 受 到 事 件 。

2、 具體來說,對於一個根 viewgroup來說,點擊事件產生後,首先會傳遞給它,這時它的dispatchtouchevent方法會被調用,如果這 個 viewgroup的 interceptedtouchevent方法返回爲 true,就表示它 要攔截當前事件,接着事件就會交給這個 viewgroup處理,即它的 ontouchevent 方 法 會 被 調 用 ; 如 果 這 個 viewgroup 的 oninterceptouchevent方法返回爲 false,就表示它不攔截當前事件, 這時當前事件就會繼續傳遞給它的子元素,接着子元素的 dispatchtouchevent方法就會被調用,如此往復,直至事件最終被處 理,當一個 view開始處理某個事件,如果它設置了 ontouchlistener, 那麼它的 ontouch方法會被調用,如果當前 view的 ontouch返回爲true,那麼 ontouchevent方法不會被調用,如果返回爲 false,當前 view的 ontouchevent方法會被調用,如果當前 view還設置了 onclicklistener,那麼 onclick也會被隨後調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章