protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measureWH(widthMeasureSpec, 0), measureWH(heightMeasureSpec, 1));
}
setMeasuredDimension(width,height),该方法进行控件宽高设,
我们自定一个方法,measureWH(),该方法用于判断,根据布局文件中给该控件设定的参数,返回相应的宽高值。
/**
* 测量宽高
* type=0 测量宽度, type=1 测量高度
*/
private int measureWH(int measureSpec, int type){
int model = MeasureSpec.getMode(measureSpec);//获得当前空间值的一个模式
int size = MeasureSpec.getSize(measureSpec);//获得当前空间值的推荐值
switch (model){
case MeasureSpec.EXACTLY://当你的控件设置了一个精确的值或者为match_parent时, 为这种模式
Log.d("xxx","EXACTLY");
//size = (int) paint.measureText(labels[0]);
return size;
case MeasureSpec.AT_MOST://当你的控件设置为wrap_content时,为这种模式
if(type == 0){
Log.d("xxx","AT_MOST");
//测量宽度
size = (int) paint.measureText(labels[0]);
return size;
} else {
//测量高度
return size;
}
case MeasureSpec.UNSPECIFIED://尽可能的多
break;
}
return 0;
}