您的位置:首页 > 移动开发 > Android开发

Android 自定义View measure模板

2015-06-24 21:45 405 查看
使用自定义View的时候,我们往往会重载onMeasure函数, 用多了之后,发现其实都是一套写法,因此记录下这个模板.

public class MyView extends View {

public MyView(Context context) {
super(context);
}

public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}

//计算宽
private int measureWidth(int measureSpec)
{
int result = 0;
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);

if(mode == MeasureSpec.EXACTLY)  //当指定了控件大小或者使用Match_Parent
{
result = size;
}else
{
//可以用下面的函数将dp转换成px
//float pxValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics());
result = 100; // 单位是像素,这里写上自己计算的控件大小
if(mode == MeasureSpec.AT_MOST) //一般使用Wrap_Content会进入这个条件
{
result = Math.min(result, size);
}
}
return result;
}

//计算高
private int measureHeight(int measureSpec)
{
int result = 0;
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);

if(mode == MeasureSpec.EXACTLY)  //当指定了控件大小或者使用Match_Parent
{
result = size;
}else
{
//可以用下面的函数将dp转换成px
//float pxValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics());
result = 100; // 单位是像素,这里写上自己计算的控件大小
if(mode == MeasureSpec.AT_MOST) //一般使用Wrap_Content会进入这个条件
{
result = Math.min(result, size);
}
}
return result;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: