前言
最近在学习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就可以解释了。
方法签名 | 简要说明 |
---|---|
drawArc | 绘制弧线 |
drawBitmap | 在指定点绘制从原位图中取出的一块图片 |
drawCircle | 绘制一个圆形 |
drawLine | 绘制一条线 |
drawLines | 绘制多条线 |
drawOval | 绘制椭圆 |
drawPath | 按提供的路径绘制 |
drawPoint | 绘制一个点 |
drawRect | 绘制一个矩形 |
drawTextOnPath | 沿路径绘制字符串 |
当然了,Canvas还有一些其它操作,旋转,放大,倾斜,平移。
方法签名 | 简要说明 |
---|---|
rotate | 旋转 |
scale | 缩放 |
skew | 倾斜 |
translate | 平移 |
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:点击下载
技术因分享饱含生机