onMeasure()方法及控件的绘制

在这个方法中,super.onMeasure()调用后将可以得到控件的宽高。

控件的onMeasure(),Onlayout()方法会被执行多次,注意这里面执行的逻辑
不要被多次执行了。


要绘制控件,分为两步
1.在onmeasure()方法中绘制好控件的大小
2.在lonlayout方法里布局好控件的位置用view.layout(left,top,right,bottm)

在OnMeasure()中
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);

int parentHeight = MeasureSpec.getSize(heightMeasureSpec);

int heightMode = MeasureSpec.getMode(heightMeasureSpec);

OnMeasure()的两个参数widthMeasureSpec,heightMeasureSpec里包含了
控件的长度和测量模式。

测量模式有MeasureSpec.EXACTLY,MeasureSpec.ATMOST,MeasureSpec.EXACTLY,MeasureSpec.UNSPECIFIED

得出的测量模式和在布局文件里的layout-width ,layout-height设置的属性有关

当属性值为fillparent,具体数值时,mode为MeasureSpec.EXACTLY

当属性值为wrapcontent时,mode为MeasureSpec.ATMOST

MeasureSpec.UNSPECIFIED模式很少用,意思为想设置多大就多大

最后可以为空间指定大小 setMeasuredDimension();这个方法里的参数是数值,不包含测量模式

还有另外一种方法去控制控件的大小
leftlayout.measure(sideWidth, heightMeasureSpec);
这里的参数是带有测量模式的
int sideWidth=MeasureSpec.makeMeasureSpec((int)(MaxWidth*0.5),MeasureSpec.EXACTLY);
  这个是制作带有测量模式的长度值













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值