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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章