android 事件分发

做个记录:
https://www.jianshu.com/p/238d1b753e64

 //如果子控件处理了事件,那么mFirstTouchTarget不为null
        if (actionMasked == MotionEvent.ACTION_DOWN
                || mFirstTouchTarget != null) {
            //disallowIntercept 一个不拦截的标记位
            //如果有这个标记位,则不拦截
            //如果没有,就去调用onInterceptTouchEvent来判断是否拦截
            //如果是ACTION_DOWN事件,那么disallowIntercept为false,因为之前有一个清空操作
            final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
            if (!disallowIntercept) {
                intercepted = onInterceptTouchEvent(ev);
                ev.setAction(action); // restore action in case it was changed
            } else {
                intercepted = false;
            }
        } else {
            // There are no touch targets and this action is not an initial down
            // so this view group continues to intercept touches.
            //代码进入这里,说明就两种情况。1.不是ACTION_DOWN事件 2.mFirstTouchTarget==null,
            // 这说明ACTION_DOWN事件已经拦截,那么接下来的事件都自己处理
            intercepted = true;
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 女生的心中大多数都有这样一个白马王子身高一米八,宽肩窄腰大长腿,对别人呢冷若冰霜,对自己呢,暖如春风。可是梦终...
    荒城黎夏阅读 1,163评论 0 0
  • 来到土耳其的卡帕多齐亚,大多数人都知道热气球,却没有多少人知道这里有许多历史古迹,当人们玩完热气球去参观各种古城时...
    天父公主阅读 1,137评论 0 1