@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = getSize(100, heightMeasureSpec);
int widht = getSize(100, widthMeasureSpec);
//比如我们画个正方形的 取最大值
if (height < widht) {
height = widht;
} else {
widht = height;
}
Log.e("lsq -->", "width" + widht + "height" + height);
setMeasuredDimension(widht, height);
}
public int getSize(int defaultSize, int measureSpec) {
int mySize = defaultSize;
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);
/**
UNSPECIFIED 父容器没有对当前View有任何限制,当前View可以任意取尺寸
EXACTLY 当前的尺寸就是当前View应该取的尺寸
AT_MOST 当前尺寸是当前View能取的最大尺寸
match_parent—>EXACTLY。怎么理解呢?match_parent就是要利用父View给我们提供的所有剩余空间,
而父View剩余空间是确定的,也就是这个测量模式的整数里面存放的尺寸。
wrap_content—>AT_MOST。怎么理解:就是我们想要将大小设置为包裹我们的view内容,
那么尺寸大小就是父View给我们作为参考的尺寸,只要不超过这个尺寸就可以啦,具体尺寸就根据我们的需求去设定。
固定尺寸(如100dp)—>EXACTLY。用户自己指定了尺寸大小,我们就不用再去干涉了,当然是以指定的大小为主啦。
*/
switch (mode) {
case MeasureSpec.UNSPECIFIED:
//没有制定大小,就用默认的大小
break;
case MeasureSpec.AT_MOST:
//用的是wrap_content
//我们将大小取最大值,你也可以取其他值
mySize = size;
break;
case MeasureSpec.EXACTLY:
//用的是 match_parent 和固定尺寸
mySize = size;
break;
}
return mySize;
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = getSize(100, heightMeasureSpec);
int widht = getSize(100, widthMeasureSpec);
//比如我们画个正方形的 取最大值
if (height < widht) {
height = widht;
} else {
widht = height;
}
Log.e("lsq -->", "width" + widht + "height" + height);
setMeasuredDimension(widht, height);
}
public int getSize(int defaultSize, int measureSpec) {
int mySize = defaultSize;
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);
/**
UNSPECIFIED 父容器没有对当前View有任何限制,当前View可以任意取尺寸
EXACTLY 当前的尺寸就是当前View应该取的尺寸
AT_MOST 当前尺寸是当前View能取的最大尺寸
match_parent—>EXACTLY。怎么理解呢?match_parent就是要利用父View给我们提供的所有剩余空间,
而父View剩余空间是确定的,也就是这个测量模式的整数里面存放的尺寸。
wrap_content—>AT_MOST。怎么理解:就是我们想要将大小设置为包裹我们的view内容,
那么尺寸大小就是父View给我们作为参考的尺寸,只要不超过这个尺寸就可以啦,具体尺寸就根据我们的需求去设定。
固定尺寸(如100dp)—>EXACTLY。用户自己指定了尺寸大小,我们就不用再去干涉了,当然是以指定的大小为主啦。
*/
switch (mode) {
case MeasureSpec.UNSPECIFIED:
//没有制定大小,就用默认的大小
break;
case MeasureSpec.AT_MOST:
//用的是wrap_content
//我们将大小取最大值,你也可以取其他值
mySize = size;
break;
case MeasureSpec.EXACTLY:
//用的是 match_parent 和固定尺寸
mySize = size;
break;
}
return mySize;
}