Android自定义控件(二)

一、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

猜你喜欢

转载自blog.csdn.net/Duckdan/article/details/80181239
今日推荐