Android View的绘制过程

来源:互联网 发布:数据侠客行txt网盘 编辑:程序博客网 时间:2024/05/21 20:25

简而言之,Android view的绘制过程包含三个过程:
OnMeasure( )OnLayout( )OnDraw( )

其中,OnMeasure( )负责确定view本身所占的空间和大小(这里的大小指长和宽)。
OnLayout( )过程确定view在其父view中的具体位置,并且根据具体位置来调整view的最终绘制大小。
OnDraw( )则负责将view在canvas中绘制出来。
如图:
这里写图片描述
下面对这三个过程进行一个简单的描述。

  1. onMeasure(),任何一个view在绘制之前都必须知道自己的长和宽是多少,view的绘制流程开始于viewRoot的 performTraversals()方法。在这个方法内部,又会调用view的measure()方法。measure方法会接收两个参数,widthMeasureSpec和heighMeasureSpec。若该view对象为viewgroup类型,需要重写OnMeasure()方法,对其子视图进行遍历的measure()过程。
  2. onLayout()的主要作用是根据子视图的大小及布局参数将view树放到合适的位置上。具体的调用链如下,layout方法会放置该view视图位于父视图的坐标轴,即mLeft,mTop,mLeft,mBottom,接下来回调onLayout()方法(若该view是viewgroup对象,需要实现该方法,对每个子视图进行布局)。
  3. draw()绘图过程。 由viewRoot对象的perform Traversals()方法调用draw()方法发起绘制该view树,值得注意的是每次发起绘图时候,并不需要重新绘制每个view的视图,只需绘制那些“需要重绘”的视图,用标志位来控制(DRAWN)

这三个流程中,google已经帮我们将draw()过程框架写好了,自定义的viewGroup只需实现Measure()过程和layout()过程即可。