onMeasure()方法及控件的绘制

来源:互联网 发布:知汇云软件 编辑:程序博客网 时间:2024/06/10 17:56
在这个方法中,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);
  这个是制作带有测量模式的长度值













0 0
原创粉丝点击