▼ 重写的几个方法
● onMeasure(测量View大小):
View的大小不仅由自身所决定,同时也会受到父控件的影响,为了我们的控件能更好的适应各种情况,一般会自己进行测量。
测量View大小使用的是onMeasure方法,我们可以从onMeasure的两个参数中取出宽高的相关数据:
<pre>
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthsize =MeasureSpec.getSize(widthMeasureSpec); //取出宽度的确切数值
int widthmode= MeasureSpec.getMode(widthMeasureSpec); //取出宽度的测量模式
int heightsize =MeasureSpec.getSize(heightMeasureSpec); //取出高度的确切数值
int heightmode= MeasureSpec.getMode(heightMeasureSpec); //取出高度的测量模式
}
</pre>
三种模式
<pre>
UNSPECIFIED 00 默认值,父控件没有给子view任何限制,子View可以设置为任意大小。
EXACTLY 01 表示父控件已经确切的指定了子View的大小
AT_MOST 10 表示子View具体大小没有尺寸限制,但是存在上限,上限一般为父View大小。
</pre>
ps:
如果对View的宽高进行修改了,不要调用 super.onMeasure( widthMeasureSpec, heightMeasureSpec); 要调用 setMeasuredDimension( widthsize, heightsize); 这个函数。
● onSizeChanged(确定View大小):
这个函数在视图大小发生改变时调用。
<pre>
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
</pre>
可以看出,它又四个参数,分别为 宽度,高度,上一次宽度,上一次高度。
这个函数比较简单,我们只需关注 宽度(w), 高度(h) 即可,这两个参数就是View最终的大小。