View和ViewGroup的事件分发机制

https://blog.csdn.net/lmj623565791/article/details/38960443 (Android View 事件分发机制 源码解析 (上) )

https://blog.csdn.net/lmj623565791/article/details/39102591(Android ViewGroup事件分发机制)

View的事件分发机制

dispatchTouchEvent-->setOnTouchListener的onTouch-->onTouchEvent

dispatchTouchEvent重点源码

    public boolean dispatchTouchEvent(MotionEvent event) {
        if (!onFilterTouchEventForSecurity(event)) {
            return false;
        }
        if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
                mOnTouchListener.onTouch(this, event)) {
            return true; 
        }
            return onTouchEvent(event); 
    }

如果设置了onTouchListener监听并且onTouch执行后返回true,则不会执行onTouchEvent方法

onTouchEvent中检测到MotionEvent.ACTION_UP事件时,会执行performClick()方法(执行onClick方法)

ViewGroup事件分发机制

1-->2-->3-->4

1. ViewGroup的diapatchTouchEvent

2. ViewGroup的onInterceptTouchEvent

-->return true 拦截事件向子View传递

-->return false 不拦截事件,子View可以消费事件

3. View的dispatchTouchEvent

-->return true 子View成功将事件消费掉了

-->return false 子View没有消费掉事件,由ViewGroup自己处理,调用ViewGroup的onTouchEvent方法

4. View的onTouchEvent



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值