自定义View日常,Canvas辅助绘制工作。画布这玩意用的好可以省下不少绘制的代码,大概就是通过控制画布的移动,剪切等来进行绘制,方便实用。
Canvas.save() 和 Canvas.restore()
- Canvas.save() 记录当前画布状态
- Canvas.restore() 讲画布回复到记录之前的状态
这哥俩通常都是成双成对出现。在你准备瞎jier操作你的画布之前先save一下,之后旋转跳跃什么的随意,当一顿操作完以后滴啊用restore方法就可以讲画布回复到save时的状态。
范围裁切
canvas.clipRect(left, top, right, bottom);
canvas.drawBitmap(bitmap, x, y, paint);
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 的常见的二维变换
- Canvas.translate(float dx, float dy) 平移画布
- Canvas.rotate(float degrees, float px, float py) 旋转画布
- Canvas.scale(float sx, float sy, float px, float py) 放大缩小画布
- Canvas.skew(float sx, float sy) 错切
使用这些方法的时候,在代码执行的时候会是倒叙执行,也就是当你代码写的是先translate然后再rotate时,它会先旋转再移动。
Over 伤心的时候笑笑就好了。