Canvas号称画布,Paint为画笔,但是呢,Canvas又不支持空参构造,必须基于Bitmap,通过重写view的onDraw返回的canvas对象另说,下面介绍一些比较重要的知识点:
Canvas有两个坐标系,一个是Canvas坐标,另外一个为绘制坐标
刚开始这两个坐标系是重合的,但是一旦Canvas做了相关处理,如:平移(Canvas.translate、旋转、缩放、skew(扭曲)等),那么绘制坐标则会改变,然后后续在Canvas上面绘制的元素也会基于绘制坐标系来绘制,但是Canvas变化之前的已绘制完成的元素不会变,通俗点说,这些操作就像是虽然你的笔还是原来的地方画,但是画纸旋转或者移动了,所以你画的东西的方位就产生变化。
Canvas经常会用到save和restore方法,为了方便一些转换操作,Canvas 提供了保存和回滚属性的方法(save和restore),比如你可以先保存目前画纸的位置(save),然后向左移动100像素后画一些图形,画完后调用restore方法返回到刚才保存的位置。
Canvas里面的save会将图层保存至“栈”,restore则会将上次保存的操作取消,如:
canvas.save();
canvas.translate(10.0f, 10.0f);
canvas.drawBimap1();
canvas.restore();
canvas.drawBitmap2();
上面的drawBimap1()会基于canvas平移后的绘制坐标系,但是drawBitmap2则不会在平移后的坐标系上绘制,应为restore会恢复至上次save的状态,基于此状态绘制坐标系来绘制。
当然,Canvas还有restoreToCount(saveCount)方法:
* Example:
* int count = canvas.save();
* ... // more calls potentially to save()
* canvas.restoreToCount(count);
* // now the canvas is back in the same state it was before the initial
* // call to save().
通过上面的示例应该能明白这个方法的用途了。
Canvas还有很多的方法:
通过这些方法能实现很多我们想要的效果。