在这个方法中,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);
这个是制作带有测量模式的长度值