android 模板view,Android 自定义View measure模板

使用自定义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));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值