设为首页 加入收藏

TOP

Android中View绘制流程以及invalidate()等相关方法分析
2014-11-24 14:37:01 来源: 作者: 【 】 浏览:3
Tags:Android View 绘制 流程 以及 invalidate 相关 方法 分析

状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),其框架过程如下:



接下来温习一下整个View树的结构,对每个具体View对象的操作,其实就是个递归的实现。




本文相关代码下载



主要作用:为整个View树计算实际的大小,即设置实际的高(对应属性:mMeasuredHeight)和宽(对应属性:mMeasureWidth),


每个View的控件的实际宽高都是由父视图和本身视图决定的。



具体的调用链如下


ViewRoot根对象地属性mView(其类型一般为ViewGroup类型)调用measure()方法去计算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调用流程就是个树形的递归过程


measure函数原型为 View.java 该函数不能被重载



为了大家更好的理解,采用“二B程序员”的方式利用伪代码描述该measure流程


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android中实现Launcher功能之添加.. 下一篇Android中通知的使用-----Notific..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: