Android View的绘制流程

引用:http://blog.csdn.net/qinjuning/article/details/7110211


流程一:      mesarue(),大小测量



计算View//ViewGroup自己的宽高,设置实际的高(对应属性:mMeasuredHeight)和宽(对应属性:  mMeasureWidth),每个View的控件的实际宽高都是由父视图和本身视图决定的。
回调View/ViewGroup对象的onMeasure()方法,该方法实现的功能如下:    
         1、设置本View视图的最终大小,该功能的实现通过调用setMeasuredDimension()方法去设置实际的高(对应属性:  
                mMeasuredHeight)和宽(对应属性:mMeasureWidth)   ;
         2 、如果该View对象是个ViewGroup类型,需要重写该onMeasure()方法,对其子视图进行遍历的measure()过程。
              
               2.1  对每个子视图的measure()过程,是通过调用父类ViewGroup.java类里的measureChildWithMargins()方法去
          实现,该方法内部只是简单地调用了View对象的measure()方法。(由于measureChildWithMargins()方法只是一个过渡
          层更简单的做法是直接调用View对象的measure()方法)。
              
     整个measure调用流程就是个树形的递归过程


流程二、 layout,进行布局:

主要作用 :为将整个根据子视图的大小以及布局参数将View树放到合适的位置上。
回调onLayout()方法(如果该View是ViewGroup对象,需要实现该方法,对每个子视图进行布局) ;
       
       2、如果该View是个ViewGroup类型,需要遍历每个子视图chiildView,调用该子视图的layout()方法去设置它的坐标值。




流程三、 draw()绘图过程

回调onDraw()方法绘制视图本身   (每个View都需要重载该方法,ViewGroup不需要实现该方法)
调用dispatchDraw ()方法绘制子视图(如果该View类型不为ViewGroup,即不包含子视图,不需要重载该方法)




其他:

 invalidate()方法 :
 刷新界面,请求重绘View树,即调用draw()。
 
 postinvalidate();// 在子线程中刷新界面
 
 
 
 requestLayout()方法 :会导致调用measure()过程 和 layout()过程 。
 
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值