我们为了让底部的控件处理事件,不被父控件拦截,一般我们会调用
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 &