Android中View的绘制过程(2)

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {           setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),                   getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));       }  

onMeasure默认的实现仅仅调用了setMeasuredDimension,setMeasuredDimension函数是一个很关键的函数,它对View的成员变量mMeasuredWidth和mMeasuredHeight变量赋值,而measure的主要目的就是对View树中的每个View的mMeasuredWidth和mMeasuredHeight进行赋值,一旦这两个变量被赋值,则意味着该View的测量工作结束。

setMeasuredDimension源码如下:

protected final void setMeasuredDimension(int measuredWidth, int measuredHeight) {       mMeasuredWidth = measuredWidth;       mMeasuredHeight = measuredHeight;          mPrivateFlags |= MEASURED_DIMENSION_SET;   }  

再来看下MeasureSpec这个类,MeasureSpec参数的值为int型,分为高32位和低16为,高32位保存的是specMode,低16位表示specSize,specMode分三种: MeasureSpec.UNSPECIFIED:父视图不对子视图施加任何限制,子视图可以得到任意想要的大小 MeasureSpec.EXACTLY:父视图希望子视图的大小是specSize中指定的大小 MeasureSpec.AT_MOST:子视图的大小最多是specSize中的大小

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/72df137146d57756eae6eff046afceac.html