码迷,mamicode.com
首页 > 其他好文 > 详细

第六章 一张白纸好作画—Canvas画布(2)

时间:2015-02-06 21:49:38      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:android   android开发   canvas   经验分享   

6.2 Canvas常用绘制方法

前面一节我们了解到如果创建一个画布,接下来我们就将要在这个画布上进行绘制。Android SDK的Canvas类中包含了一系列用于绘制的方法,方法分为3种类型,下面简单介绍这些常用的绘制方法。

 

1)Canvas类的几何图形(Geometry)方面的方法用于绘制点、绘制线、绘制矩形、绘制圆弧等。

其中一些主要的方法如表6-1所示:

方法

返回值

说明

drawARGB(int a, int r, int g, int b)

void

将整体填充为某种颜色

drawPoints(float[] pts, Paint paint)

void

绘制一个点

drawLines(float[] pts, Paint paint)

void

绘制一条线

drawRect(RectF rect, Paint paint)

void

绘制矩形

drawCircle(float cx, float cy, float radius, Paint paint)

void

绘制圆形

drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

void

绘制圆弧

drawPath(Path path, Paint paint)

void

按路径绘画一个形状

表6-1 Canvas类的绘制几何图形的方法

 

2)Canvas类的文本(Text)方面的方法用于直接绘制文本内容,文本通常用一个字符串来表示。

其中一些主要的方法如表6-2所示。其中的几个重载方法都是绘制文本,只是参数不同而已。

方法

返回值

drawText(String text, int start, int end, float x, float y, Paint paint)

void

drawText(char[] text, int index, int count, float x, float y, Paint paint)

void

drawText(String text, float x, float y, Paint paint)

void

drawText(CharSequence text, int start, int end, float x, float y, Paint paint)

void

表6-2 Canvas类的绘制文本内容的方法

 

3)Canvas类的位图(Bitmap)方面的方法用于直接绘制位图,位图通常用一个Bitmap类来表示。

其中一些主要的方法如表6-3所示:

方法

返回值

说明

drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)

void

指定Matrix绘制位图

drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, int height,boolean hasAlpha, Paint paint)

void

指定数组作为Bitmap绘制

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

void

自动缩放到目标矩形的绘制

表6-3 Canvas类的绘制位图的方法

 

经验分享:

void drawLines(float[] pts, Paint paint) // 绘制一条线

void drawRect(RectF rect, Paint paint) // 绘制矩形

需要特别注意的是,上面方法绘制的图形都是一个左闭右开的。

例如:绘制矩形RectF rect,那么实际绘制的矩形是一个rect.x, rect.y为开始坐标,宽高为rect.right-1, rect.bottom-1的一个矩形。

 

6.3 对Canvas进行变换

简单的画线条,矩形,圆形都有现成的方法可以用了,我们就可以来做一些比较复杂的绘制,比如旋转,缩放。

首先在View的onDraw()方法里,我们经常会看到调用save()和restore()方法,它们到底是干什么用的呢?

save():用来保存Canvas的状态。save()之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。

restore():用来恢复Canvas之前保存的状态。防止save()后对Canvas执行的操作对后续的绘制有影响。

 

--------------------------------------------
程序员赚钱不易 一定要学会理财
平安陆金所 隶属于平安集团的p2p平台
年投资回报率7%-9% 是替代银行理财的首选
个人经验 推荐投资安鑫或者有担保的彩虹项目
不要投资安e 那个几乎无法转让 想提前提现非常困难
首次投资1000元即可额外赚几百元 不赚白不赚
--------------------------------------------

知道了如何保存和恢复Canvas了,那么我们就可以放心地对画布进行平移、放缩了。

1)translate(float dx, float dy)

用来移动canvas和它的原点到不同的位置上。默认原点坐标为(0,0)。

参数:

dx,左右偏移量(正数是向右移动),单位是像素

dy,上下偏移量(正数是向下移动) ,单位是像素

2)rotate(float degrees)

用来以原点为中心对canvas旋转。默认原点坐标为(0,0)。

3)rotate(float degrees, float px, float py)

参数:

degrees,旋转的角度

px,设置旋转中心的横坐标(正数是向右移动)

py,设置旋转中心的竖坐标(正数是向下移动)

4)scale(float sx, float sy);

对canvas自身进行缩放。

5)scale(float sx, float sy, float px, float py)

参数:

sx,横轴缩放大小

sy,数轴缩放大小

px,设置原点的位置(正数是向左移动,与rotate中的px正好相反)

py,设置原点的位置(正数是向上移动,与rotate中的py正好相反)

6)其它

clipPath(Pathpath),clipRect(Rect rect, Region.Op op),clipRegion(Region region)等类似clipXXXX()方法。用于设置画布(Canvas)中的有效区域,在无效区域上draw,对画布没有任何改变。

 

经验分享:

在对Canvas进行变换的操作中,save()和restore()方法会经常使用。需要特别注意的是,save()和restore()要配对使用(restore可以比save少,但不能多),如果restore()调用次数比save()多,会引发Error。save()和restore()之间,往往夹杂的是对Canvas的特殊操作。

 

第六章 一张白纸好作画—Canvas画布(2)

标签:android   android开发   canvas   经验分享   

原文地址:http://blog.csdn.net/arui319/article/details/43574661

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!