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 


                     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值