Android图形图像之Canvas,Paint与Path类

前言


    最近在学习Android图形方面相关的知识,自己开发的经验很少,于是现在更多的时间用在学习上,单纯的学习,总是容易遗忘,于是希望将自己学习的东西稍加总结,写在自己的博客上面,供自己查看。由于学习Android开发太晚,很多知识别人都已经是写过了,但是我还是希望有一天,有人碰巧查资料看到我写得博客,能够对他有所帮助,那或许是写博客最大的安慰了吧!

介绍


    Canvas、Paint和Path类主要用于绘图,与前面介绍的Bitmap不同,Bitmap代表的是已经是成品的图片了,而今天的介绍的类是在上面动态的生成图片,那这几个类的作用分别是什么呢?

Canvas类:英语意思:帆布,也就是说,我们暂时把它看成是一个画布就可以了。

Paint类:英语意思:油漆,涂料,在这里,我们把它看成一个画笔,这个类能够提供API对画笔进行各种操作。

Path类:英语意思:路径,那怎么理解,那就是路径了!

Canvas类


    首先,我们来看一下Canvas的官方文档,官方文档对其的讲解是最准确了,当了,详细程度嘛!你懂的,然而并不详细。
这里写描述
    Google的大神们写得文档,那上面写了什么呢,上面告诉了我们:Canvas这个类通过回调方式,将画的东西给保存了起来,但是画的时候,需要四个部件:
①一个Bitmap用来把保存像素。这点很奇怪,这里怎么出现了Bitmap了呢。不要着急,我会在接下来讲解到相关的内容。
②一个Canvas来保存绘画的时候在Bitmap上面的操作。
③一个原始元素,就是 文字,位图,矩形之类的。
④一个画笔。

Canvas源代码:
这里写图片描述
通过Canvas的源代码我们可以发现,在Canvas里面定义了一个Bitmap类的对象mBitmap,这个mBitmap才是的真正的画布,而Canvas是将Bitmap进行封装,并且提供了一系列对mBitmap进行操作的API,那么对上面①需要Bitmap就可以解释了。

Canvas的绘制方法:

方法签名简要说明
drawArc绘制弧线
drawBitmap在指定点绘制从原位图中取出的一块图片
drawCircle绘制一个圆形
drawLine绘制一条线
drawLines绘制多条线
drawOval绘制椭圆
drawPath按提供的路径绘制
drawPoint绘制一个点
drawRect绘制一个矩形
drawTextOnPath沿路径绘制字符串

当然了,Canvas还有一些其它操作,旋转,放大,倾斜,平移。

Canvas相关方法:

方法签名简要说明
rotate旋转
scale缩放
skew倾斜
translate平移

Paint类


Paint类
    我们可以看出Paint类就是封装了一些类似于我们平时操纵的真正的笔。如风格,颜色等信息。由于这个类没什么可讲的,我们直接看方法吧。

Paint类相关方法:

方法签名简要说明
setColor设置颜色
setAlpha设置透明度
setPathEffect设置绘制路径的路径效果
setShader设置填充效果
setAntiAlias设置是否是抗锯齿
setStrokeWidth设置笔的宽度
setStyle设置Paint的填充
setTextAlign设置文字对齐方式
setTextSize设置文字大小

Path类

这里写图片描述

Path是一个封装了直线,二次曲线,立方曲线的类,也可以用于画布。其实我们把path当成一个路径就好了。其它的说多了也记不住。
    我们需要将Path相关的API列举一下,方便查看。

方法签名简要说明
addArc添加一个弧线作为路径
addOval添加一个椭圆作为路径
addRect添加一个矩形作为路径
addPath添加一个复制的path作为路径
isEmpty查看是否是空的
lineTo添加一行从最后一点到指定点
moveTo设置作为路径的起点
close关闭轮廓


下面通过一个Demo来演示一下。

public class MyView extends View {


    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO 自动生成的构造函数存根
    }

    @SuppressLint("DrawAllocation")
    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 设置画笔为白色
        canvas.drawColor(Color.WHITE);
        // 新建一个画笔,并且对画笔进行设置。
        // 设置抗锯齿,颜色,画笔的笔触宽度,画笔的填充风格。
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.BLUE);
        paint.setStrokeWidth(3);
        paint.setStyle(Paint.Style.STROKE);
        // 接下来,就开始画画吧。
        canvas.drawCircle(240, 110, 80, paint);
        //将画笔填充模式改为纯色填充
        paint.setStyle(Paint.Style.FILL);
        canvas.drawRect(160, 220, 320, 320, paint);
        //重新修改一下填充风格。
        paint.setStyle(Paint.Style.STROKE);
        RectF rec = new RectF(160, 350, 320, 450);
        canvas.drawArc(rec, 0, 180, false, paint);
        // 用path 制作一个三角形。同时给paint设置一个颜色,
        paint.setColor(Color.GREEN);        
        Path path = new Path();
        path.moveTo(240, 500);
        path.lineTo(160, 650);
        path.lineTo(320, 650);
        path.close();
        canvas.drawPath(path, paint);
        // 沿着路径绘制文本。

        Path pathText = new Path();
        paint.setColor(Color.YELLOW);
        pathText.moveTo(80, 700);
        pathText.lineTo(160, 800);
        pathText.lineTo(240, 700);
        pathText.lineTo(320, 800);
        pathText.lineTo(400, 700);
        //pathText.close();

        canvas.drawPath(pathText, paint);
         paint.setStyle(Paint.Style.FILL);  
         paint.setTextSize(30);
        canvas.drawTextOnPath("好好学习,天天向上!", pathText, -10, 24, paint);

    }

}

Demo效果如下:


这里写图片描述


点击下载Demo:点击下载

——————————————————————————————-

欢迎转载,尊重作者劳动成果,转载请务必注明出处
技术因分享饱含生机

——————————————————————————————-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值