面试要点:事件分发机制

郭霖大大讲的很好了.传送门https://blog.csdn.net/guolin_blog/article/details/9097463

我想说的是 view 的 dispatchTouchEvent 这段源码一定要记住,不难.

阻断与.先判断有无OnTouchListener,然后判断是否可点击,然后判断onTouch事件返回值


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



然后是viewGroup这段源码:

disallowIntercept 为子控件设置值,默认为false 可以防止父控件拦截掉子控件的消息.

onInterceptTouchEvent 默认为false 不拦截


if (disallowIntercept || !onInterceptTouchEvent(ev)) {

    child.dispatchTouchEvent(ev);

}


面试时 一问事件分发,直接给他讲源码.蹭蹭加分.

你可能感兴趣的:(android)