requestDisallowInterceptTouchEvent实现原理

本文探讨了Android中requestDisallowInterceptTouchEvent的实现原理,它用于防止父控件拦截子控件的事件。通过分析源码,可以看到该方法会设置父控件的标记位,影响事件分发流程。在dispatchTouchEvent方法中,标记位决定了是否调用onInterceptTouchEvent,从而控制事件是否向下传递。当设置不允许拦截时,事件会直接传递给子视图,否则父视图可能根据自身逻辑决定是否拦截并处理事件。
摘要由CSDN通过智能技术生成

我们为了让底部的控件处理事件,不被父控件拦截,一般我们会调用

v.getParent().requestDisallowInterceptTouchEvent(true);

来阻止父控件对事件的拦截,来看下它的实现原理。

首先明确下v.getParent()对于底部的View来说,得到的就是上层的父控件,也就是上层的ViewGroup,来看下ViewGroup的requestDisallowInterceptTouchEvent方法

@Override
    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        if (disallowIntercept == ((mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0)) {
            // We're already in this state, assume our ancestors are too
            return;
        }

        if (disallowIntercept) {
            mGroupFlags |= FLAG_DISALLOW_INTERCEPT;
        } else {
            mGroupFlags &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值