范围裁切与几何变化

clipRect() clipPath() clipPath() 切出来的圆为什么没有抗锯⻮效果?因为「强⾏切边」 clipOutRect() / clipOutPath()

这这个裁切是裁切选定区域显示,因为与paint无关,所以裁切的区域是有毛边的

translate(x, y) rotate(degree) scale(x, y) skew(x, y)

canvas的几何变换,canvas有自己的坐标系,每次变化会导致自己的坐标系整体被替换,难以计算

可以反向操作一手

当canvas的坐标不变,变得是要绘制的图像变换:这个代价是,代码是倒序的

Matrix几何变换

preTranslate(x, y) / postTranslate(x, y) preRotate(degree) / postRotate(degree) preScale(x, y) / postScale(x, y) preSkew(x, y) / postSkew(x, y

其中pre的函数与 canves的几何变换一样,post则是反向操作

重复使用Matrix是记得使用 Matrix.reset() 来重置

使用Camera做canvas三维旋转

rotate() / rotateX() / rotateY() / rotateZ() translate() setLocation()

Camera变换后,需要受用 Camera.applyToCanvas(Canvas)来应用到Canvas上

setLocation() 可以设置相机高度来控制,由于canves三维旋转后,相机投射带来的缩放,做旋转的时候记得先把轴心移动到图片的中点,翻转后在移动回来,为了防止Camera反复旋转,可以用Camera.save和restore来处理,假如要做翻页效果,可以旋转canves来实现,同时增加自己根号2个区域大小,保证自己翻转的时候不被切