美文网首页
绘制基础图形

绘制基础图形

作者: 狂奔的_土豆 | 来源:发表于2020-05-19 17:43 被阅读0次
自定义view流程
image.png
重要方法
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
    }

1.Draw()的意思是绘制视图自身
2.dispatchDraw()是绘制子视图
3.无论是View还是ViewGroup对它们俩的调用顺序都是onDraw()->dispatchDraw()
4.在绘制View控件时,需要重写onDraw()函数,在绘制ViewGroup时,需要重写dispatchDraw()函数。

常用方法

1.绘制内容

     //绘制底色
    canvas.drawColor(Color.BLACK);
    //在坐标(200,500)的位置绘制一个点
    canvas.drawPoint(200, 500, paint);
    //在这些坐标位置绘制多个点
    canvas.drawPoints(new float[]{
            200, 200,
            300, 300,
            400, 400
    }, paint);
    //绘制一条起点为(10,10),终点为(100,600)的直线
    canvas.drawLine(10, 10, 100, 600, paint); 
   //绘制一组线
    canvas.drawLines(new float[]{
            0, 0, 0, 400,
            0, 0, 500, 0
    }, paint);

     //绘制矩形
     //第一种方式
    canvas.drawRect(315,115,345,145,paint);
     //第二种方式
    Rect rect = new Rect(360, 115, 390, 145);
    canvas.drawRect(rect,paint);
    //第三种方式
    RectF rectF = new RectF( 335.5f, 160F,370.5f, 170.6f);
    canvas.drawRect(rectF,paint);

2.圆角矩形

// 第一种
RectF rectF = new RectF(100,100,800,400);
//drawRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Paint paint)
canvas.drawRoundRect(rectF,30,30,paint);
// 第二种,API21以上可用
canvas.drawRoundRect(100,100,800,400,30,30,paint);

** rx,ry的理解**


image.png

圆角矩形的角实际上不是一个正圆的圆弧,而是椭圆的圆弧,这里的两个参数实际上是椭圆的两个半径
在rx为宽度的一半,ry为高度的一半时,刚好是一个椭圆,通过上面我们分析的原理推算一下就能得到,而当rx大于宽度的一半,ry大于高度的一半时,实际上是无法计算出圆弧的,所以drawRoundRect对大于该数值的参数进行了限制(修正),凡是大于一半的参数均按照一半来处理

3.椭圆

// 第一种
RectF rectF = new RectF(100,100,800,400);
canvas.drawOval(rectF,paint);
// 第二种
canvas.drawOval(100,100,800,400,paint);

4.圆

// 绘制一个圆心坐标在(500,500),半径为400 的圆。
canvas.drawCircle(500,500,400,paint);

5.圆弧

// 第一种
public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint){}
 // 第二种
public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint) {}

startAngle :开始角度
sweepAngle:扫过角度
useCenter:是否使用中心

相关文章

网友评论

      本文标题:绘制基础图形

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