美文网首页
View的工作原理

View的工作原理

作者: 和莱 | 来源:发表于2020-03-21 12:17 被阅读0次

    ViewRoot和DecorView

    在ActivityThread创建Activity以后,会将顶级View DecorView添加到Window中,同时创建ViewRootImpl对象RootView和DecorView关联。RootView的perfromTravelsals方法对View进行绘制,经过measure、layout、draw将View绘制出来,其中measure方法用来测量View的宽和高,layout用来确定View在父容器中的布局,draw将View显示在屏幕上。


    1.png

    performRravelsals方法会依次调用performMeasure、preformLayout和performDraw方法,这三个方法完成对顶级View DecorView的绘制,而performMeasure又调用measure方法,measure方法继续调用子元素的measure方法依次完成View树的遍历,其他两个方法类似。

    理解MeasureSpec

    在测量过程中,系统会将View的LayoutParams根据父容器所施加的规则转换成MeasureSpec,然后再根据这个MeasureSpec测量出View的宽和高。顶级View DecorView和普通View的测量过程也不太,顶级View由LayoutParams和窗口大小共同决定MeasureSpec,普通View由LayoutParams和父容器所施加的规则共同决定MeasureSpec,MeasureSpec一旦确定,onMeasure方法就可以确定View的宽和高了。

    measure过程

    如果是原始的View,则调用measure方法就完成了测量过程,如果是ViewGroup,出了完成自己的measure过程,还需要遍历子元素的measure方法。

    layout过程

    layout方法步骤是,首先通过setFrame方法设定View四个顶点的位置,这样就确定了View在父容器中的位置,然后再调用onLayout方法确定子元素的位置。

    draw过程

    绘制背景、绘制自己、绘制子元素(通过dispatchDraw方法遍历所有子元素的draw方法,如此draw事件就一层一层传递下去了)、绘制装饰。
    源码如下:


    2.png

    相关文章

      网友评论

          本文标题:View的工作原理

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