范围裁切有两个方法: clipRect()
和 clipPath()
。
clipRect
canvas.save(); // 保存canvas状态
// 绘制裁切代码
canvas.clipRect(left, top, right, bottom);
canvas.drawBitmap(bitmap, x, y, paint);
canvas.restore(); // 恢复绘制范围,在这之后的不会被裁切
clipPath 其实和 clipRect() 用法完全一样,只是把参数换成了 Path ,所以能裁切的形状更 多一些:
canvas.save();
canvas.clipPath(path1);
canvas.drawBitmap(bitmap, point1.x, point1.y, paint);
canvas.restore();
canvas.save();
canvas.clipPath(path2);
canvas.drawBitmap(bitmap, point2.x, point2.y, paint);
canvas.restore();
几何变换 几何变换的使用大概分为三类:
- 使用 Canvas 来做常见的二维变换;
- 使用 Matrix 来做常见和不常见的二维变换;
- 使用 Camera 来做三维变换。
- 使用 Canvas 来做常见的二维变换;
1.1 Canvas.translate(float dx, float dy)
参数里的 dx 和 dy 表示横向和纵向的位移。
canvas.save(); canvas.translate(200, 0); canvas.drawBitmap(bitmap, x, y, paint); canvas.restore();
1.2 Canvas.rotate(float degree, float dx, float dy)
- degrees : 旋转角度,单位是度(也就是一周有 360° 的那个单位),顺时针为正向;
- px 和 py 是轴心的位置。
canvas.save(); canvas.rotate(45, centerX, centerY); canvas.drawBitmap(bitmap, x, y, paint); canvas.restore();