view事件分发

从源码分析

首先被执行的是dispatchTouchEvent()方法

            //noinspection SimplifiableIfStatement
            ListenerInfo li = mListenerInfo;
            if (li != null && li.mOnTouchListener != null
                    && (mViewFlags & ENABLED_MASK) == ENABLED
                    && li.mOnTouchListener.onTouch(this, event)) {
                result = true;
            }

            if (!result && onTouchEvent(event)) {
                result = true;
            }
        }

上面这段代码截取dispatchTouchEvent中的核心代码,这几句话足够分析了。首先ListenerInfo这个类保存了时间的各种监听信息。ouTouchListener就是其中的一个属性,代表此view是否设置touchlistener当设置了此监听的时候,首先调用此监听的ontouch方法,当此方法返回false时,会调用view本身对触摸的处理onTouchEvent

此时大家肯定会疑问为什么没有onclicklistener的处理,当我们点进TouchEvent时会发现在此方法调用onclick方法,所以当我们的ontouch方法返回true,那么就不会执行onTouchEvent也就代表不会执行onclick方法,onclick方法在up时响应


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值