Canvas常用API

1

(一)获取Canvas

第一种在所有View的onDraw(Canvas canvas)方法中直接获取

1 @Override
2 protected void onDraw(Canvas canvas) {
3 <span style="white-space:pre">    </span>super.onDraw(canvas);
4 }

第二种直接new一个Canvas

1 //先得到一个Bitmap对象,通过Canvas的构造函数创建一个Canvas类
2     Bitmap bitmap = Bitmap.createBitmap(100100, Config.ARGB_8888);
3     Canvas canvas = new Canvas(bitmap);
4          
5     //或者先创建一个Canvas类,通过setBitmap()方法创建一个画布
6     Canvas canvas = new Canvas();
7     canvas.setBitmap(bitmap);

第三种调用SurfaceHolder.lockCanvas(),返回一个Canvas对象

(二)常用API


//获取画布宽高
2 canvas.getHeight();
3 canvas.getWidth();
4  
5 //获取Canvas画布像素密度
6 canvas.getDensity();
7  
8 //获取画布过滤器
9 canvas.getDrawFilter();


1 //设置Canvas的Matrix矩阵
2     public void concat(Matrix matrix)

1 //clip相关的方法主要是对画布Canvas进行裁剪
2     canvas.clipPath(path_STROKE);
3     canvas.clipPath(path_STROKE, op);
4     canvas.clipRect(rect);
5     canvas.clipRect(rect, op);
6     canvas.clipRect(left, top, right, bottom);
7     canvas.clipRect(left, top, right, bottom, op);
8     canvas.clipRegion(region);
9     canvas.clipRegion(region, op);

1 //给Canvas画布填充颜色
2 canvas.drawARGB(a, r, g, b);
3 canvas.drawColor(color);
4 canvas.drawColor(color, mode);

01 //通过不同参数在Canvas上画位图
02 canvas.drawBitmap(bitmap, left, top, paint_STROKE);
03 canvas.drawBitmap(bitmap, matrix, paint_STROKE);
04 canvas.drawBitmap(bitmap, src, dst, paint_STROKE);
05 canvas.drawBitmap(bitmap, src, dst, paint_STROKE);
06 canvas.drawBitmap(colors, offset, stride, x, y, width, height, hasAlpha, paint_STROKE);
07 canvas.drawBitmapMesh(bitmap, meshWidth, meshHeight, verts, vertOffset, colors, colorOffset, paint_STROKE);
08  
09 //通过不同的参数在Canvas上画图片
10 canvas.drawPicture(picture);
11 canvas.drawPicture(picture, dst);
12 canvas.drawPicture(picture, dst);

1 //在Canvas上画圆和椭圆
2 canvas.drawCircle(cx, cy, radius, paint_STROKE);
3  
4 //扇形
5 canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint_STROKE);
6  
7 //椭圆
8 canvas.drawOval(oval, paint_STROKE);

1 //在Canvas上画线
2 canvas.drawLine(startX, startY, stopX, stopY, paint_STROKE);
3 canvas.drawLines(pts, paint_STROKE);
4 canvas.drawLines(pts, offset, count, paint_STROKE);

1 //在Canvas画布上画点
2 canvas.drawPoint(x, y, paint_STROKE);
3 canvas.drawPoints(pts, paint_STROKE);
4 canvas.drawPoints(pts, offset, count, paint_STROKE);

1 //在Canvas画布上画矩形或圆角矩形
2 canvas.drawRect(r, paint_STROKE);
3 canvas.drawRect(rect, paint_STROKE);
4 canvas.drawRoundRect(rect, rx, ry, paint_STROKE);

01 //利用Canvas在画布上写文字相关Api
02 canvas.drawPosText(text, pos, paint_STROKE);
03 canvas.drawPosText(text, index, count, pos, paint_STROKE);
04  
05 canvas.drawText(text, x, y, paint_STROKE);
06 canvas.drawText(text, index, count, x, y, paint_STROKE);
07 canvas.drawText(text, start, end, x, y, paint_STROKE);
08 canvas.drawText(text, start, end, x, y, paint_STROKE);
09  
10 canvas.drawTextOnPath(text, path_STROKE, hOffset, vOffset, paint_STROKE);
11 canvas.drawTextOnPath(text, index, count, path_STROKE, hOffset, vOffset, paint_STROKE);


1 //绘制顶点(指多边形)
2 canvas.drawVertices(mode, vertexCount, verts, vertOffset, texs, texOffset, colors, colorOffset, indices, indexOffset, indexCount, paint_STROKE);

01          
02 //给Canvas设置一个bitmap画布
03 canvas.setBitmap(bitmap);
04          
05 //获取画布宽高
06 canvas.getHeight();
07 canvas.getWidth();
08  
09 //获取和设置Canvas画布像素密度
10 canvas.getDensity();
11 canvas.setDensity(density);
12  
13 //获取和设置画布过滤器
14 canvas.getDrawFilter();
15 canvas.setDrawFilter(filter);
16  
17 //获取Canvas上截取的矩形
18 canvas.getClipBounds();
19 canvas.getClipBounds(bounds);
20  
21  
22 //获取Canvas的矩阵
23 canvas.getMatrix();
24 canvas.getMatrix(ctm);
25 canvas.setMatrix(matrix);
26  
27 //返回此位图绘制画布上允许的最大高度和宽度。试图用一个位图画比这个值高会导致错误。
28 canvas.getMaximumBitmapHeight();
29 canvas.getMaximumBitmapWidth();
30  
31 //返回画布上的私有堆栈状态的矩阵或截图。
32 canvas.getSaveCount();
33  
34 //判断此画布使用硬件加速
35 canvas.isHardwareAccelerated();
36  
37 //如果当前层引入装置是不透明的返回true
38 canvas.isOpaque();
39  
40 //暂时没有用过,不知道怎么用
41 canvas.quickReject(path_STROKE, type);
42 canvas.quickReject(rect, type);
43 canvas.quickReject(left, top, right, bottom, type);

01 //返回调用save()之前状态,是用来清除所有修改矩阵或裁剪自上次保存状态
02 canvas.restore();
03 canvas.restoreToCount(saveCount);
04  
05 //保存当前画布状态,之后的的 translate,scale,rotate,skew,concat or clipRect,clipPath等都会照常运行
06 //但调用restore()后,会回复到save之前的Canvas状态
07 canvas.save();
08 canvas.save(saveFlags);
09  
10 //和save()类似,在现在的层上新建一层,调用restore后回复原状态
11 canvas.saveLayer(bounds, paint_STROKE, saveFlags);
12 canvas.saveLayer(left, top, right, bottom, paint_STROKE, saveFlags);
13 canvas.saveLayerAlpha(bounds, alpha, saveFlags);
14 canvas.saveLayerAlpha(left, top, right, bottom, alpha, saveFlags);

01 //让画布扭曲
02 canvas.skew(sx, sy);
03  
04 //让画布旋转
05 canvas.rotate(degrees);
06 canvas.rotate(degrees, px, py);
07  
08 //让画布缩放
09 canvas.scale(sx, sy);
10 canvas.scale(sx, sy, px, py);
11  
12 //让画布翻转
13 canvas.translate(dx, dy);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值