自定义View之绘制基础

绘制颜色:drawColor

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

public class DrawColorView extends View {

    public DrawColorView(Context context) {
        super(context);
    }

    public DrawColorView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawColorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制颜色
        canvas.drawColor(Color.RED);
    }
}

 

绘制圆:drawCircle

DrawCircleView.java

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawCircleView extends View {

    private Paint paint;

    public DrawCircleView(Context context) {
        super(context);
    }

    public DrawCircleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawCircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();
        //画圆,前2个参数,定义圆心位置,第三个参数:圆的半径,第四个参数:Paint
        canvas.drawCircle(530, 500, 200, paint);

    }
}

 

绘制矩形:drawRect

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawRectView extends View {

    private Paint paint;

    public DrawRectView(Context context) {
        super(context);
    }

    public DrawRectView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawRectView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();

        //参数解读:
        //left:左边距离y轴的距离
        //top:上边距离x轴的距离
        //right:右边距离y轴的距离
        //bottom:底边距离x轴的距离
        //矩形的宽为:right-left
        //矩形的高为:bottom-top

        //绘制矩形
        canvas.drawRect(300,300,800,500,paint);
    }
}

绘制点:drawPoint

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawPointView extends View {

    private Paint paint;

    public DrawPointView(Context context) {
        super(context);
    }

    public DrawPointView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawPointView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(50);
        //画圆点:Paint.Cap.ROUND
        //画方点:Paint.Cap.BUTT、Paint.Cap.SQUARE
        paint.setStrokeCap(Paint.Cap.ROUND);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();

        //圆点或者方点坐标
        //x,y 圆点或者方点坐标  最后一个参数是Paint
        //圆点或者方点大小可以通过setStrokeWidth来设置
        canvas.drawPoint(550,500,paint);

    }
}

 

绘制椭圆:drawOval

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawOvalView extends View {

    private Paint paint;

    public DrawOvalView(Context context) {
        super(context);
    }

    public DrawOvalView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawOvalView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();

        //参数解读:
        //left:左边距离y轴的距离
        //top:上边距离x轴的距离
        //right:右边距离y轴的距离
        //bottom:底边距离x轴的距离
        //椭圆的宽为:right-left
        //椭圆的高为:bottom-top
        canvas.drawOval(300,800,800,1000,paint);
        
    }
}

 

绘制线:drawLine

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawLineView extends View {

    private Paint paint;

    public DrawLineView(Context context) {
        super(context);
    }

    public DrawLineView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(10);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();

        //startX、startY 是起始点为坐标
        //stopX、stopY 是结束点的坐标
        //最后一个参数是:Paint
        //线的长度为:stopX-startX
        canvas.drawLine(300,600,800,600,paint);
        
    }
}

 

绘制圆角矩形:drawRoundRect

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawRoundRectView extends View {

    private Paint paint;

    public DrawRoundRectView(Context context) {
        super(context);
    }

    public DrawRoundRectView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawRoundRectView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();

        //参数解读:
        //left:左边距离y轴的距离
        //top:上边距离x轴的距离
        //right:右边距离y轴的距离
        //bottom:底边距离x轴的距离
        //rx:圆角横向半径
        //ry:圆角纵向半径
        //圆角矩形的宽为:right-left
        //圆角矩形的高为:bottom-top

        //绘制圆角矩形
        canvas.drawRoundRect(300,800,800,1000,30,30,paint);

    }
}

 

绘制弧形或者扇形drawArc

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawArcView extends View {

    private Paint paint;

    public DrawArcView(Context context) {
        super(context);
    }

    public DrawArcView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawArcView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();

        //绘制弧形或者扇形
        
        //参数解读

        //设置填充模式
        paint.setStyle(Paint.Style.FILL);
        //绘制扇形
        canvas.drawArc(240, 100, 800, 500, 300, 60, true, paint);
        //绘制弧形  useCenter:false就是弧形   ture就是扇形
        canvas.drawArc(240, 100, 800, 500, 20, 90, false, paint);
        //设置画线模式
        paint.setStyle(Paint.Style.STROKE);
        //绘制弧形
        canvas.drawArc(240, 100, 800, 500, 120, 170, false, paint);
    }
}

绘制Path:drawPath

package com.zhoujian.retrofit.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


public class DrawPathView extends View {

    private Paint paint;

    public DrawPathView(Context context) {
        super(context);
    }

    public DrawPathView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawPathView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint = new Paint();
        //设置画笔颜色
        paint.setColor(Color.RED);
        // 设置画的模式
        // Paint.Style.FILL:填充模式
        // Paint.Style.STROKE:画线模式
        paint.setStyle(Paint.Style.FILL);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置画线宽度
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initPaint();


        Path path = new Path();

        path.addArc(300, 200, 500, 400, -225, 225);
        path.arcTo(500, 200, 700, 400, -180, 225, false);
        path.lineTo(500, 610);
        canvas.drawPath(path,paint);


    }
}

发布了276 篇原创文章 · 获赞 70 · 访问量 41万+

猜你喜欢

转载自blog.csdn.net/u014005316/article/details/104454715