在自定义View的时候,我们经常会用到Canvas进行绘制,其中也会用到Matrix对图像进行移动、旋转等操作,这个时候就会涉及到concat
和setMatrix
这两个方法,将Matrix的变化效果设置到Canvas上,那么这两个方法有什么区别呢?
闲话不多说,先使用代码看看最终的效果:
使用setMatrix
1 | @Override |
实际效果图:
使用concat
1 | paint.setColor(Color.BLUE); |
实际效果图:
从最终的效果图我们可以看出,两者的差距还是很大,那么为什么会有这么大的区别呢?
实际上,setMatrix
作用的是当前的画布,而concat
作用的是画布上的组件。具体讲的详细一点的话,在这里我对matrix放大两倍,使用setMatrix的话,相当于整个坐标轴放大了两倍,而绘制的参数并没有改变。因为canvas的原点并没有在左上角,导致实际上会有偏差。而concat
改变的是绘制的参数,200变400,100变200,而坐标轴不变,所以整体上就当好是两倍的效果。