android之事件分發的細節說明

1、在dispatchTouchEvent()中,當前action(down、move、up)返回true纔會執行後邊的action,若dispatchTouchEvent()直接return false,則後邊的action不會得到執行

    如:當用戶按下 down時,dispatchTouchEvent() return false,則後邊的move和up操作則不會執行,

           當用戶按下 down時,dispatchTouchEvent() {

                switch(e.getAction){

                     case down:

                           return true;

                     case move:

                           return true;

                     case up:

                           return true;

                }

            },down/move/up的操作都會執行

                 


           當用戶按下 down時,dispatchTouchEvent() {

                switch(e.getAction){

                     case down:

                           return true;

                     case move:

                           return false;

                     case up:

                           return true;

                }

            },down/move/的操作都會執行,但up操作不會執行


2、父類攔截事件細節:攔截事件有兩個控制變量,其中兩個變量的關係才能攔截事件:

            第一  是禁用攔截字段disallowIntercept 默認是false,若是沒改動,則開發者只需要通過重寫onInterceptTouchEvent() return true;來                 攔  截事件,即disallowIntercept = false&&onInterceptTouchEvent() return true,則攔截事件,不會分發給子view;

        第二 可以直接通getParent().requestDisallowInterceptTouchEvent(true),不禁用攔截事件,設置之後不會執行                      onInterceptTouchEvent()方法,直接執行子view的dispatchTouchEvent()方法,之後就按照子view的分發機制

                     case down:

                           return true;


                     case down:

                           return true;


可以看到大體的事件流程爲:

MyLinearLayout的dispatchTouchEvent -> MyLinearLayout的onInterceptTouchEvent -> MyButton的dispatchTouchEvent ->Mybutton的onTouchEvent 


                     

發佈了68 篇原創文章 · 獲贊 38 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章