Android中canvas和paint的关系及使用

 刚刚开始接触学习Android的同鞋们在看到工程中出现的那么多的canvas啦、paint啦等等的使用的时候,都会惊讶于由这些方法创作出来的perfect界面,但同时也会对这些方法的使用感到困惑,他们大多时间他们都一块儿出现,到底他们是个什么样的关系?又该怎样用他们呢?

        我们想象一个画面:一个小孩儿在一块画板上画画(虽然画的是啥咱不知到啦~~~)

        在Android中,Canvas其实就相当与那小孩儿画板上的那块画布啦!(网上大多都这样解释,但是我觉得还不是很准确,因为这块画布不仅仅就只是在那边随你怎么画啦,它会给你很多帮助的哟,比如你要画矩形的画,就不用自己去找三角板啊啥的了,直接拿它的“模板——drawRect(RectF rect, Paint paint)”过来用就可以啦,只要改改参数就OK哈~~~)他主要实现屏幕的绘制,包括配合Matrx矩阵实现的图像旋转、剪裁以及选取等功能。Canvas类中有很多实用的方法,列举部分如下:

void drawRect(RectF rect, Paint paint) //绘制区域,参数一为RectF一个区域

voiddrawPath(Pathpath,Paintpaint)//绘制一个路径,参数一为Path路径对象

voiddrawBitmap(Bitmapbitmap,Rectsrc,Rectdst,Paintpaint)//贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。

voiddrawLine(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)//画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint画刷对象。

voiddrawPoint(floatx,floaty,Paintpaint)//画点,参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。

voiddrawText(Stringtext,floatx,floaty,Paintpaint)//渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。

void  drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) //在路径上绘制文本,相对于上面第二个参数是Path路径对象

        再来看看paint哈~在上面列举的canvas类中的方法中也可以看到出现了很多次的paint,再回到那个画画的小孩儿,其实这边的paint就相当于那个小孩儿手中的画图工具——也就是画笔喽^_^  这个画图工具既然是那个小孩儿的,那肯定也就可以由它的主人(那个小屁孩儿)去选择他喜欢的颜色、粗细、材质等等啦~~~~下面也列举部分paint常用方法如下:

void  setARGB(int a, int r, int g, int b)  设置Paint对象颜色,参数一为alpha透明通道

voidsetAlpha(inta)设置alpha不透明度,范围为0~255

voidsetAntiAlias(booleanaa)//是否抗锯齿

voidsetColor(intcolor)//设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义

voidsetFakeBoldText(booleanfakeBoldText)//设置伪粗体文本

voidsetLinearText(booleanlinearText)//设置线性文本

PathEffectsetPathEffect(PathEffecteffect)//设置路径效果

RasterizersetRasterizer(Rasterizerrasterizer)//设置光栅化

ShadersetShader(Shadershader)//设置阴影

voidsetTextAlign(Paint.Alignalign)//设置文本对齐

voidsetTextScaleX(floatscaleX)//设置文本缩放倍数,1.0f为原始

voidsetTextSize(floattextSize)//设置字体大小

TypefacesetTypeface(Typefacetypeface)//设置字体,Typeface包含了字体的类型,粗细,还有倾斜、颜色等。

voidsetUnderlineText(booleanunderlineText)//设置下划线

最后最后,再提醒一下哈,canvas和paint都可以在onraw中直接使用的哟~~~

转载自:http://blog.csdn.net/listening_music/article/details/6859229

相关推荐