美文网首页
View绘制流程及事件分发

View绘制流程及事件分发

作者: 细雨蒙情 | 来源:发表于2019-03-20 10:25 被阅读0次

    事件分发相关

    1、事件分发流程

    • ViewGroup的事件分发
    // 点击事件产生后,会直接调用dispatchTouchEvent()方法
    public boolean dispatchTouchEvent(MotionEvent ev) {
        //代表是否消耗事件
        boolean consume = false;
        if (onInterceptTouchEvent(ev)) {
        //如果onInterceptTouchEvent()返回true则代表当前View拦截了点击事件
        //则该点击事件则会交给当前View进行处理
        //即调用super.dispatchTouchEvent(),及调用View的dispatchTouchEvent();
          consume = onTouchEvent (ev) ;
        } else {
          //如果onInterceptTouchEvent()返回false则代表当前View不拦截点击事件
          //则该点击事件则会继续传递给它的子元素
          //子元素的dispatchTouchEvent()就会被调用,重复上述过程
          //直到点击事件被最终处理为止
          consume = child.dispatchTouchEvent (ev) ;
        }
        return consume;
       }
    
    • View的事件分发
    public boolean dispatchTouchEvent(MotionEvent event) {  
        if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&  
                mOnTouchListener.onTouch(this, event)) {  
            return true;  
        }  
        return onTouchEvent(event);  
    }
    
    • View和ViewGroup的OnTouchEvent
     if (((viewFlags & CLICKABLE) == CLICKABLE ||  
                (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {  
        //如果当前的事件是抬起手指,则会进入到MotionEvent.ACTION_UP这个case当中。
    //如果该控件是可以点击的,就一定会返回true
            return true;  
        }  
    //如果该控件是不可以点击的,就一定会返回false
        return false;  
    }
    

    2、onTouch、onTouchEvent、onClick

    3、解决滑动冲突

    二、View绘制流程

    1、绘制流程

    Android View的绘制流程
    灵魂画师,Android绘制流程——Android高级UI

    2、Activity,window,view,viewRoot关系

    • Activity 创建时通过attach()初始化了一个 Window 也就是 PhoneWindow,一个 PhoneWindow 持有一个 DecorView 的实例,DecorView 本身是一个 FrameLayout,继承于View,Activty通过setContentView将xml布局控件不断addView()添加到View中,最终显示到Window于我们交互;

    三、自定义View

    https://www.jianshu.com/p/c84693096e41
    https://blog.csdn.net/carson_ho/article/details/62037696

    四、动画

    https://www.jianshu.com/p/733532041f46

    相关文章

      网友评论

          本文标题:View绘制流程及事件分发

          本文链接:https://www.haomeiwen.com/subject/fgsusftx.html