标签:android android开发 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的一个矩形。 |
简单的画线条,矩形,圆形都有现成的方法可以用了,我们就可以来做一些比较复杂的绘制,比如旋转,缩放。
首先在View的onDraw()方法里,我们经常会看到调用save()和restore()方法,它们到底是干什么用的呢?
save():用来保存Canvas的状态。save()之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。
restore():用来恢复Canvas之前保存的状态。防止save()后对Canvas执行的操作对后续的绘制有影响。
知道了如何保存和恢复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的特殊操作。 |
标签:android android开发 canvas 经验分享
原文地址:http://blog.csdn.net/arui319/article/details/43574661