Android View的绘制过程

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()

    原文作者:行者_zm
    原文地址: https://www.jianshu.com/p/8901ff51f67e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞