关于canvas的重要方法用法总结
首先,我们要明确的是,对于Android绘图来讲,它的坐标是这样的:
1 、画矩形
drawRect(float left, float top, float right, float bottom, Paint paint)
这个方法是画出一个矩形
关于这个方法的参数,我从这个博客里面看到的一张图片上获得了很好的解释
2 、画线
drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
drawLines(float[] pts, Paint paint)
第一个方法参数的含义是这样的:
startX:起始端点的X坐标。
startY:起始端点的Y坐标。
stopX:终止端点的X坐标。
stopY:终止端点的Y坐标。
第二个方法可以同时绘制多条线,参数含义:
pts:数组中每四个为一组,一组就是一条线。
当然Paint大家都知道就是画笔,在这里画笔可以设置线宽,会用到Paint的一个方法:paint.setStrokeWidth();
3 、画布平移
translate(float dx, float dy)
这个方法是将画布平移
关于参数含义是这样的:
dx:x轴方向移动的距离
dy:y轴方向移动的距离
需要注意的是,画布平移后原本画布的(0,0)坐标被平移到(dx,dy)处,平移后原点坐标还是(0,0)而不是(dx,dy)
4 、画布缩放
scale(float sx, float sy)
scale(float sx, float sy, float px, float py)
第一个方法只有两个参数,是以原点为中心将画布缩放
第二个方法有四个参数,是以(px,py)为中心将画布缩放
各个参数的含义是这样:
sx:x轴方向缩放倍数
sy:y轴方向缩放倍数
px:缩放中心的x坐标
py:缩放中心的y坐标
5、画布旋转
rotate(float degrees)
rotate(float degrees, float px, float py)
第一个方法是以原点为中心旋转画布
第二个方法是以(px,py)为中心旋转画布
各参数含义是这样的:
degrees:旋转角度
px:旋转中心的x坐标
py:旋转中心的y坐标
需要注意的是,旋转以顺时针方向为正方向
6、画布的保存与恢复
save()
restore()
restoreToCount(int saveCount)
我们对画布进行一系列的缩放旋转等操作前可以使用save方法对当前状态进行保存。
当我们想恢复某个状态时,可以调用restore方法恢复最近一次保存的状态。
save方法会返回一个int类型的值,当我们想恢复至某个特定状态时,可以调用restoreToCount方法,将save返回的值传进去。
7、画文字
drawText(String text, float x, float y, Paint paint)
drawText(String text, int start, int end, float x, float y, Paint paint)
第一个方法参数含义:
text:要画的文本内容
x:文本开始坐标的x坐标
y:文本开始坐标的y坐标
paint:画笔
第二个方法参数含义:
这里只说一下多出来的几个参数
start:开始绘制的字的位置
end:节水绘制的字的位置
8、画圆
drawCircle(float cx, float cy, float radius, Paint paint)
各个参数的含义:
cx:圆中心坐标的x坐标
cy:圆中心坐标的y坐标
radius:圆半径大小
9、画椭圆
drawOval(float left, float top, float right, float bottom, Paint paint)
这个方法参数含义和画矩形类似。
10、画点
drawPoint(float x, float y, Paint paint)
public void drawPoints(float[] pts, Paint paint)
第一个方法可以画一个点
参数含义:
x:点坐标的x坐标
y:点坐标的y坐标
第二个方法可以画多个点
参数含义:
pts:数组每两个为一组,一组为一个点。
11、画椭圆
RectF oval = RectF(float left, float top, float right, float bottom)
canvas.drawOval(RectF oval, Paint paint)
RectF构造方法的四个参数的含义为:
left:椭圆最左端的x坐标
top:椭圆最顶端的y坐标
right:椭圆最右端的x坐标
bottom:椭圆最底端的y坐标
12、画弧线
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
参数含义:
第一个参数为一个oval对象
第二个参数为弧线开始的角度
第三个参数为弧线划过的角度
第四个参数为弧线和中心点是否连线
第五个参数为Paint对象
需要注意的是这里的角度是从180度开始,按照顺时针旋转
13、画多边形/画路径
Path path = new Path()
canvas.drawPath(Path path, Paint paint)
我们需要先定义一个路径对象path
然后定义多边形的路径:
path.moveTo(80, 200);// 此点为多边形的起点
path.lineTo(120, 250);
path.lineTo(80, 250);
//…. 可以添加多个点。构成多边形
path.close(); // 使终点和起点链接,构成封闭图形,如果不连接就是画路径
然后就可以通过drawPath方法将路径描绘出来,这样一个多边形就出来了
14、画圆角矩形
drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
这里重点说一下rx和ry:
rx:x轴方向的圆角半径
ry:y轴方向的圆角半径
说点题外话:
在onDraw方法中可以调用invalidate()方法重新调用onDrow方法对图形进行重绘
在onDraw方法中调用postInvalidateDelayed(long delayMilliseconds)方法可以延迟绘制,延迟时长为delayMilliseconds毫秒