一、Canvas 画布操作:
画布操作的意义在于帮忙我们用更容易理解的方式做出想要的效果。
(所有的画布操作都只影响后续的绘制,对之前的绘制内容没有影响)
1.画布操作
(1)位移(translate)
translate是平移操作,基于当前点的平移一段距离;而不是基于(0,0)圆点的平移。(移动是可叠加的~)
(2)缩放(scale)
sx、sy是缩放比例,而px和py是控制缩放中心的。
缩放比例sx、sy的取值范围:负号代表反转
取值范围(n) | 说明 |
[-∞, -1) | 先根据缩放中心放大n倍,再根据中心轴进行翻转 |
-1 | 根据缩放中心轴进行翻转 |
(-1, 0) | 先根据缩放中心缩小到n,再根据中心轴进行翻转 |
0 | 不会显示,若sx为0,则宽度为0,不会显示,sy同理 |
(0, 1) | 根据缩放中心缩小到n |
1 | 没有变化 |
(1, +∞) | 根据缩放中心放大n倍 |
(3)旋转(rotate)
旋转也是可以叠加的;px和py也是设置旋转的中心点。
(4)错切(skew)
sx和sy分别是x和y方向上倾斜相应的角度,sx和sy是倾斜角度的tan值。
(5)快照(save)和回滚(restore)
相关API | 简介 |
save | 把当前的画布的状态进行保存,然后放入特定的栈中 |
saveLayerXxx | 新建一个图层,并放入特定的栈中 |
restore | 把栈中最顶层的画布状态取出来,并按照这个状态恢复当前的画布 |
restoreToCount | 弹出指定位置及其以上所有的状态,并按照指定位置的状态进行恢复 |
getSaveCount | 获取栈中内容的数量(即保存次数) |
2.Canvas图片文字
(1)绘制图片(大佬说要关闭硬件加速,具体戳这里)
可以把Picture看做是一个录制Canvas操作的录像机
相关方法 | 简介 |
public int getWidth () | 获取宽度 |
public int getHeight () | 获取高度 |
public Canvas beginRecording (int width, int height) | 开始录制 (返回一个Canvas,在Canvas中所有的绘制都会存储在Picture中) |
public void endRecording () | 结束录制 |
public void draw (Canvas canvas) | 将Picture中内容绘制到Canvas中 |
public static Picture createFromStream (InputStream stream) | (已废弃)通过输入流创建一个Picture |
public void writeToStream (OutputStream stream) | (已废弃)将Picture中内容写出到输出流中 |
beginRecording和endRecording成对使用(将一些Canvas操作录制到Picture中)
具体使用的绘制(draw)方法:
序号 | 简介 |
1 | 使用Picture提供的draw方法绘制。 |
2 | 使用Canvas提供的drawPicture方法绘制。 |
3 | 将Picture包装成为PictureDrawable,使用PictureDrawable的draw方法绘制。 |
(2)drawBitmap
2.绘制文字
常用方法:
这里要注意使用String和Char[]截取的内容的不同。
String截取的是[)这样的,而Char[]截取的是[]这样的。(区别是否包含最后一位)
第二种不建议使用,反人类。
第三种大佬没写,我这里也就不笔记了~