美文网首页自定义控件
【Android 开发】自定义View(上)——方法介绍

【Android 开发】自定义View(上)——方法介绍

作者: 榆野铃爱 | 来源:发表于2019-11-01 08:56 被阅读0次

    内容简概

    一、onDraw方法介绍
    二、onMeasure方法介绍
    三、onSizeChanged方法介绍
    四、其他问题

    具体内容

    一、onDraw方法介绍

    (一)Paint
    1. Paint在Android开发中充当画笔的功能,在绘图中发挥了重要的作用。一般只有当系统提供的方法不能满足需求时,才用onDraw方法自绘。下面展示一些常用的方法。
    方法 作用
    setColor(int color) 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
    setAntiAlias(boolean aa) 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
    setStyle(Paint.Style style) 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE Style.FILL: 实心 STROKE:空心 FILL_OR_STROKE:同时实心与空心。
    setStrokeWidth(float width) 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度。
    setTextSize(float textSize) 设置绘制文字的字号大小
    1. 拓展文章:android 绘图之Paint的效果研究
    (二)Path
    1. Path是绘图的路径,可以用来绘制直线、圆、贝塞尔曲线等。下面主要介绍绘制贝塞尔曲线的方法。
    方法 作用
    moveTo(x1,y1) 移动画笔
    quadTo(x1,y1,x2,y2) 绘制贝塞尔曲线
    cubicTo(x1,y1,x2,y2,x3,y3) 绘制贝塞尔曲线

    那么quadTo和cubicTo有什么不同呢?cubicTo其实就多了一个控制点。看一个例子,绘制同样的贝塞尔曲线:

    用quadTo:

    mPath.moveTo(100, 500);
    mPath.quadTo(300, 100, 600, 500);
    canvas.drawPath(mPath, mPaint);
    

    用cubicTo:

    mPath.moveTo(100, 500);
    mPath.cubicTo(100, 500, 300, 100, 600, 500);
    canvas.drawPath(mPath, mPaint);
    

    如果cubicTo的例子中不加moveTo呢?那么cubicTo则以(0,0)为起点,(100,500)和(300,100)为控制点绘制贝塞尔曲线:


    (三)Canvas
    1. 翻译过来就是画布,用来对画布进行一些操作,下面是一些常用方法。
    方法 作用
    drawColor、drawRGB、drawARGB 给画布绘制颜色
    drawPoint、drawLine、drawCircle、drawArc 画点、线、圆、圆弧
    drawBitmap、drawPicture 绘制图片
    drawText 绘制文字
    drawPath 绘制路径
    1. 拓展文章:自定义控件之绘图篇(四):canvas变换与操作

    二、onMeasure方法介绍

    onMeasure 方法简单的理解就是是用于测量视图的大小,主要是用来测量自己和内容的来确定宽度和高度。下面是使用的例子。

        /**
         * 当继承于ViewGroup的时候
         * @param widthMeasureSpec 父控件预测的这个控件的最大宽度
         * @param heightMeasureSpec 父控件预测的这个控件的最大高度
         */
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            //固定的尺寸 - 自己设定宽高
            //setMeasuredDimension(100,100);
        }
    
    onMeasure 作用

    (1)一般情况重写onMeasure()方法作用是为了自定义View尺寸的规则,如果你的自定义View的尺寸是根据父控件行为一致,就不需要重写onMeasure()方法 。
    (2)如果不重写onMeasure方法,那么自定义view的尺寸默认就和父控件一样大小,当然也可以在布局文件里面写死宽高,而重写该方法可以根据自己的需求设置自定义view大小。如果这个方法被重写,它的子类要保证测量高度和宽度至少是view的最小高宽,否则子类将无法在界面展示出来!!!

    目前为止,写的小动画都可以直接用父视图,根本不需要用这个方法,显得这个方法有点鸡肋,不过也许以后会用到吧。为什么要用onMeasure?

    三、onSizeChanged方法介绍

    这个方法是在视图的大小发生改变后的回调,使用这个方法可以让形状“动起来”,制成简易的动画。

    @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
        }
    

    四、其他问题

    (一)Paint.ANTI_ALIAS_FLAG是使位图抗锯齿的标志。

    用法: Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    参考文章:Paint效果相关

    (二)drawArc变量详解

    drawArc有两种写法,法一是通过 RectF 来确定弧线的位置和大小,第二种是直接设置(第二种需要 API 21)。

    // 法一
    canvas.drawArc(RectF oval, float startAngle,   float sweepAngle, boolean useCenter, Paint paint) 
    // 法二
    canvas.drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)  
    

    先用一张图让你了解它各个参数的定义。



    具体使用如下:

    // 法一
    RectF frame = new RectF(50,100,50,50);
    canvas.drawArc(frame,120,300,false,mPaint);
    
    // 法二
    canvas.drawArc(50,100,50,50, 120, 300, false, Paint paint) 
    
    (三)在使用drawArc时,有可能会遇到以下问题:

    提示API过低,这时候只需要在Gradle里修改版本即可,最后不要忘了sync Now。





    结语:

    方法就介绍到这,具体的使用请见下一篇文章。

    相关文章

      网友评论

        本文标题:【Android 开发】自定义View(上)——方法介绍

        本文链接:https://www.haomeiwen.com/subject/vsfpvctx.html