自定义View的要点一

 

一:测量View的大小,以及测量方式和测量方法。

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
           //获取最小的长宽量
		final int minimumWidth = getSuggestedMinimumWidth();
		final int minimumHeight = getSuggestedMinimumHeight();
        // 根据XML定义和需求测量使用的数据
		int viewWidth = resolveMeasured(widthMeasureSpec, minimumWidth);
		int viewHeight = resolveMeasured(heightMeasureSpec, minimumHeight);
		setMeasuredDimension(viewWidth, viewHeight);
	}

 

二:根据测量值类MeasureSpec获取父控件测量子控件需要的值,根据需求来定义取值的大小,是取人为控制的大小还是测量的大小。

private int resolveMeasured(int measureSpec, int desired) {
		int result = 0;
		int specSize = MeasureSpec.getSize(measureSpec);
		switch (MeasureSpec.getMode(measureSpec)) {
		case MeasureSpec.UNSPECIFIED://未指定xml定义的wrap_content
			result = desired;
			break;
		case MeasureSpec.AT_MOST://最大xml定义的match_parent
			result = Math.max(specSize, desired);
			break;
		case MeasureSpec.EXACTLY://确切的数值(如100dp)
		default:
			result = specSize;
		}
		return result;
	}

三:获取自定义控件的大小,通过onSizeChanged获取使用。

    @Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		final int width = w - getPaddingLeft() - getPaddingRight();
		mSquareWidth = width / 3.0f;

		final int height = h - getPaddingTop() - getPaddingBottom();
		mSquareHeight = height / 3.0f;
	}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值