android measure 流程 (方便记忆)

来源:互联网 发布:儿童编程软件scratch2 编辑:程序博客网 时间:2024/05/16 15:13

ViewRoot.performTraversals
ViewRoot.performMeasure
ViewRoot.performLayout
ViewRoot.performDraw

这里写图片描述

int measureSpec= View.MeasureSpec.makeMeasureSpec(“长度”,View.MeasureSpec.AT_MOST);
int measureSpecMode=View.MeasureSpec.getMode(measureSpec);
int measureSpecSize=View.MeasureSpec.getSize(measureSpec);

ViewGroup

public  onMeasure(int widthMeasureSpec,int heightMeasureSpec){    //ViewGroup 的onMeasure一般都是抽象待实现的具体规则具体实现    foreach(View child: childs){        int childWidthMeasureSpec=child.layoutWidth+widthMeasureSpec;//这里不是真加 就是混合下        int childHeightMeasureSpec=child.layoutHeight+heightMeasureSpec;        child.measure(childWidthMeasureSpec,childHeightMeasureSpec)     }    setMeasureDimension(widthMeasureSpec,heightMeasureSpec)}

View

public  onMeasure(int widthMeasureSpec,int heightMeasureSpec){    //确定宽高(这里省略了些逻辑,miniwidth,miniheight)    setMeasureDimension(widthMeasureSpec,heightMeasureSpec)}

当子元素测量完毕后,ViewGroup会根据子元素getMeasure总和的结果,测量自己的大小

所以抽象的基本流程是这个 measure ->onMeasure(可能循环调用 子measure)->setMeasureDimension

0 0