一、Android自定义控件的三个核心方法分别是:
1.1 onMeasure方法
onMeasure(int widthMeasureSpec, int heightMeasureSpec):用于获取和制定测量规则的。widthMeasureSpec和heightMeasureSpec是由mode+size两部分组成的,它是由父布局和子View共同决定的。其中mode的值可以分为三类:
1.未指定(UNSPECIFIED):0<<30;
2.确切的(EXACTLY):1<<30;
3.至多的(AT_MOST):2<<30;
继承View之后翻看View的onMeasure方法可以发现如下代码:
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
getSuggestedMinimumWidth(),getSuggestedMinimumHeight()是用来获取当前控件背景的宽度和高度,getDefalutSize()方法的源码如下:
public static int getDefaultSize(int size, int measureSpec) {
int result = size;
//获取当前控件的测量规则模式
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
//根据测量规则模式来确定当前控件的尺寸
switch (specMode) {
case MeasureSpec.UNSPECIFIED:
result = size;
break;
case MeasureSpec.AT_MOST:
case MeasureSpec.EXACTLY:
result = specSize;
break;
}
return result;
}
1.2 onLayout方法
onLayout(boolean changed, int left, int top, int right, int bottom):用于获取和制定位于屏幕上的位置。搭载Android系统的智能设备都是以设备的左上角顶点为圆点,结合这个设计就可以知道left的值为当前控件的左侧距离屏幕左边缘的距离,top的值为当前控件的顶侧距离屏幕上边缘的距离,right的值为当前控件的右侧距离屏幕左边缘的距离,bottom的值为当前控件的低侧距离距离屏幕上边缘的距离。
1.3 onDraw方法
onDraw(Canvas canvas):用于绘制控件,Android的API提供了大量的方法来方便用户绘制控件。
二、常用的两个方法:
onSizeChanged(int w, int h, int oldw, int oldh):当onMeasure方法调用完毕之后被调用,通常用户获取控件的宽高
onFinishInflate():在从xml文件填充控件的最后阶段被调用,此方法只在从xml文件填充控件的时候被调用。
上述方法都被调用的时候,他们的调用顺序如下所示:
onFinishInfalte–>onMeasure–>onSizeChanged–>onLayout–>onDraw