Android View的绘制过程

作者: 行者_zm | 来源:发表于2019-01-05 08:27 被阅读22次

    View的绘制流程

    view的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout、和draw三个过程才能最终将一个View绘制出来,其中measure用来测量View发的宽和高,layout用来确认View在父容器中的放置位置,而draw则负责将View绘制在屏幕上。

    performTraversals方法

    1. performTraversals会一次调用performMeasure、performLayut、performDraw三个方法

    2.上面三个方法分别完成顶级View的measure、layout和draw这三大流程

    其中在perfomMeasure中会调用measure方法

    3.在measure方法中又会调用onMeasure方法

    4.在onMeasure方法中则会对所有的子元素进行measure过程,这个时候measure流程就从父容器传到子元素中了,这样就完成了一次measure过程

    5.接着子元素会重复父容器的measure过程,如此反复就完成了整个View树的遍历。同理,performLayout和performDraw的传递流程和performMeasure是类似的。

    其中:

    measure过程决定了View的宽/高

    measure完成以后,可以通过getMeasuredWidth和getMeasuredHeight方法来获取到View测量后的宽/高,在几乎所有的情况下他都等同于View最终的宽/高

    Layout过程决定了View的四个顶点的坐标和实际的View的宽/高,完成以后,可以通过getTop、getBottom、getRight、getLeft拿到View四个顶点的位置,并可以通过getWidth和getHeight方法来拿到View的最终宽/高。

    Draw过程则决定了View的显示,只用draw方法完成以后View的内容才能呈现在屏幕上。

    注:

    getMeasuredWidth和getMeasuredHeight方法获取的高度和宽度是measure过程中计算得到到,所以要在measure之后调用。

    getWidt()获取的宽度 = right - left 这是layout之后才能确定,所以getWidth()要在layout之后调用才能获取到值。同理,getHeight()

    相关文章

      网友评论

        本文标题:Android View的绘制过程

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