重写onMeasure方法的时候注意遵循系统的要求:
1.确保大于min值;
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(
getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}
2.在onMeasure()中调用setMeasuredDimension(int, int) 来保存计算的宽高的结果,如果不加会报一下错误
java.lang.IllegalStateException: onMeasure() did not set the measured dimension by calling setMeasuredDimension()
getWidth/Height和getMeasuredWidth/Height的区别:
getWidth、getLeft是相对于父View的位置大小,而getMeasuredWidth、getMeasuredHeight是测量后该View的实际大小。
简单的解释就是:如果View的内容在父View内全部显示时,那么这时他们的值是相等的。当View的内容在父View内显示不下,并超出父View视图时,此时他们的值是不相等的。即
getMeasuredHeight()是View的实际大小,而getHeight是此时View在父View中显示的大小。