canvas 可译为画布,Android官方给他的解释是:
The Canvas class holds the "draw" calls.
我理解的是canvas是专门用来显示画上去的东西的类,也就是画布的功能了。
1.构造方法
canvas有两个构造函数
(1)Canvas()
(2)Canvas(Bitmap bitmap)
(ps:View的onDraw(Canvas canvas)方法中有参数canvas,我们可以直接使用)
2.常用方法
drawARGB(int a,int r,int g,int b)
用指定的ARGB 颜色(alpha,red,green,blue),填充canvas所绑定的bitmap。
drawArc
(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint
paint);
前四个参数是为了确定椭圆的形状,分别是椭圆的左、上、右、下四个顶点。
param3 是画圆弧开始的角度,
param4 是画圆弧结束的角度,
param5 useCenter 如果是TRUE,则是一个封闭的,扇形有面积的圆弧,FALSE,表示一条弧线。
param6 画图所用的画笔。
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
param1 确定椭圆形状
param2 确定圆弧开始的角度
param3 确定圆弧结束的角度
useCenter 和Paint 参数作用同上。
这两个重载的方法的作用是绘制弧线,圆弧。
rect = new RectF(100,100,280,180);
canvas.drawArc(rect,0,90,true,paint);
上面的代码运行后,显示出来的效果如图
userCenter=false 效果如下
drawCircle
(float cx, float cy, float radius, Paint
paint)
画圆。
param1 圆心横坐标
param2 圆心纵坐标
param3 圆半径
param4 画笔
drawLine(float startX, float startY, float stopX, float stopY, Paint
paint)
画线。
参数好理解,不说了
drawLines
(float[] pts, int offset, int count,
Paint
paint)
drawLines
(float[] pts,
Paint
paint)
这两个方法的作用画多条线。
param1 pts 是一个float数组,存放值得数量必须为4的倍数,4,8,12.。。数组里面的四位数值(即起点的横纵坐标,终点的横纵坐标)确定一条直线。
param2 offset 忽略pts数组的前offset个数值。
param3 pts数组中第offset个元素起count个数值有效。
param4 画笔。
重载的第二个方法比较简单就两个参数,如果看它的实现方法的话会发现他在内部,调用了第一个参数比较多的方法,第三,第四个参数设置为0了而已。
说了这么多,可能有点绕不好理解。下面上代码。
canvas.drawLines(
new float[]{
100,100,300,300,50,80,300,50,100,500,500,500}
,0,12,paint)
;
canvas.drawLines(
new float[]{
100,100,300,300,50,80,300,50,100,500,500,500}
,3,9,paint)
;
drawOval
(float left, float top, float right, float bottom,
Paint
paint)
绘制一个椭圆。param1,param2,param3,param4是控制椭圆的四个顶点的位置。方法比较简单好用,我就不细说了。
drawPoint
(float x, float y,
Paint
paint)
drawPoints(float[] pts, Paint paint)
drawPoints(float[] pts, int offset, int count, Paint paint)
这三个方法是画 点 的方法。其中pts参数,offset参数,count参数跟drawLines方法中参数意思是差不多的。区别是drawLines方法中的pts是4个数值为一组,而drawPoints中的pts数组中的是2个数值为一组,因为一个点的确定需要知道横纵坐标就行了。
举例:
canvas.drawPoints(
new float[]{
100,100,300,300,50,80,300,50,100,500,500,500}
,3,9,paint)
;
drawRect
(float left, float top, float right, float bottom,
Paint
paint)
drawRect(Rect r, Paint paint)
drawRect(RectF rect, Paint paint)
这三个方法是根据参数绘制矩形。好理解。
drawRoundRect
(
RectF
rect, float rx, float ry,
Paint
paint)
绘制圆角矩形,param2,param3是控制圆角的角度。
drawText
(
CharSequence
text, int start, int end, float x, float y,
Paint
paint)
drawText(String text, int start, int end, float x, float y, Paint paint)
drawText(String text, float x, float y, Paint paint)
。。
绘制文字。start参数:从第几个字符开始绘制
end参数:绘制到第几个字符
x ,y参数:确定开始绘制的位置
canvas.drawText("abcdefg",2,5,300,300,paint);
rotate(float degrees, float px, float py)
是坐标轴旋转的函数。
param1:旋转的角度,正数为顺时针;
param2:旋转中心点x坐标;
param3:旋转中心点y坐标;
canvas.drawRect(100, 100, 150, 150, paint);
canvas.rotate(30);
canvas.drawRect(200, 200, 250, 250, paint);
scale(float sx, float sy, float px, float py)
坐标系缩放的函数。
param1:x轴缩放的比例
param2:y轴缩放比例
param3:先把坐标系移到该点的x坐标
param4:把坐标系先移到原点的y坐标
canvas.drawRect(100, 100, 150, 150, paint);
canvas.scale(2,2,100,100);
canvas.drawRect(100, 100, 150, 150, paint);
canvas.drawRect(100, 100, 150, 150, paint);
canvas.scale(2,2);
canvas.drawRect(100, 100, 150, 150, paint);
translate(float dx, float dy)
该函数的作用是坐标系移到指定的点。
save()
restore()
这两个方法是相互配合使用的。save方法,保存当前画布的状态。
restore方法是恢复到save方法保存的画布状态。
转载请注明原文地址: https://ju.6miu.com/read-665445.html