Android学习之——Canvas画图

记一次重新温故Android画图,学过的知识很容易忘记,特在此记录!

前期准备

首先,需要新建一个类,继承View或其他控件(依需求而定),然后实现两个构造方法(一定要两个),然后重写onDraw()方法

public class Canvas extends View {


    private Paint mPaint = new Paint();

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

    public Canvas(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @SuppressLint("NewApi")
    @Override
    protected void onDraw(android.graphics.Canvas canvas) {
        super.onDraw(canvas);
    }
}

然后直接在需要的布局中使用这个控件就行了!

Paint相当于画布 , canvas相当于画笔,接下来就可以画东西了,先上一点基本属性

Paint常用的设置函数:
setAlpha()透明度
setAntiAlias()抗锯齿
setColor(),setARGB()设置颜色
setStyle(Paint.Style style) 设置填充样式
setStrokeCap(Paint.Cap cap) 画笔的样式(落笔,收笔时)
setStrokeJoin(Paint.Join join)连接点的样式
setStrokeWidth(float width)设置画笔宽度
setShadowLayer(float radius, float dx, float dy, int shadowColor) 设置阴影
setTextSize(float textSize) 字体大小
setTextAlign(Paint.Align.RIGHT)设置字体对齐方式
setColorFilter(ColorFilter filter) 设置颜色过滤
setUnderlineText(true) 下划线
setPathEffect() 设置路径效果
setTypeface() 设置字体风格
setFilterBitmap() 设置图片过滤
setXfermode(Xfermode xfermode) xfermode设置图像混合模式
setShader(Shader shader) 设置shader包括渐变shader,图片shader

1.设置字体

canvas.drawText("android Paint 学习 CENTER", 300, 400, mPaint);

canvas.drawText(显示的文字 , 左边距 , 上边距 , 画布);

2.设置阴影

mPaint.setShadowLayer(10 ,-50 , 50 , Color.BLUE);

mPaint.setShadowLayer(阴影模糊度(数值越大越清晰)  ,  右边距 , 上边距 , 文本颜色)



3.画正方形

(1)写法1:Rect rect = new Rect(100 ,100 ,300 ,500);

canvas.drawRect(rect , mPaint);

(2)写法2:canvas.drawRect(100,700,300,900,mPaint);

canvas.drawRect(左边距 ,上边距, 长 , 宽 , 画布)

4.画圆角矩形

canvas.drawRoundRect(100, 400, 300, 600 ,50 ,50 ,mPaint);

canvas.drawRoundRect(100, 400, 300, 600 ,50 ,50 ,mPaint);

canvas.drawRoundRect(左边距 , 上边距 , 右边距 , 下边距 , 长 , 宽 ,画布)

5.画圆形

canvas.drawCircle(400,400,200,mPaint);

canvas.drawCircle(圆心左边距 , 圆形上边距 , 半径 ,画布);

6.画路径

Path path = new Path();
        path.moveTo(200 ,200); //起点
        path.lineTo(300 ,300); //途点
        path.lineTo(200 ,600); //终点
        canvas.drawPath(path , mPaint);

7.画连续直线

mPaint.setStrokeWidth(15);
float[] positions2 = {20,20,20,35,320,320,320,335,340,340,350,387,360,370,390,420,410,200,90,170};
//        float[] positions2 = {第一个点起点x轴,第一个点起点y轴,第一个点终点x轴,第二个点终点y轴... }
canvas.drawLines(positions2,4,12,mPaint);

绘制线的集合,参数中pts是点的集合,两个值代表一个点,四个值代表一条线,互相之间不连接。
offset跳过的点,count跳过之后要绘制的点的总数,可以用于集合中部分点的绘制

7.画圆弧

 RectF rectF1 = new RectF(100 ,100 ,400 ,400);
 canvas.drawArc(rectF1 , 0 , 270 ,false , mPaint);
//        RectF rectF1 = new RectF(左边距 ,上边距 ,圆心x轴 ,圆心y轴);
//        canvas.drawArc(圆 , 起始圆弧度 , 终点圆弧度  , 是否直线连接 , 画布);

以下是第四个参数true和false的区别

8.画椭圆

//        RectF rectF2 = new RectF(起始点x轴, 起始点y轴, 终点x轴, 终点y轴);
//        起始点相当于矩形的左上角,终点相当于矩形右下角,在矩形中画圆
RectF rectF1 = new RectF(200, 200, 400, 400);
RectF rectF2 = new RectF(200, 500, 700, 600);
canvas.drawOval(rectF1,mPaint);
canvas.drawOval(rectF2,mPaint);

9.绘制点

float[] points = {30,40,40,50,60,60};
canvas.drawPoints(points,mPaint);

10.画环形文字

//        path.addArc(new RectF(起始点X轴,起始点y轴,终点X轴,终点Y轴),起始度,终止度);
//        canvas.drawTextOnPath(文字,路径,水平偏移量,垂直偏移量,画布);
        Path path = new Path();
        path.addArc(new RectF(100,100,800,800),0,360);
        canvas.drawTextOnPath("好好学习,天天向上,好好学习,天天向上,好好学习,天天向上",path,100,100,mPaint);

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值