在自定义控件和利用surfaceview时候利用serfaceHolder锁定画布画图做游戏的时候,在绘制tank的图片的时候需要根据tank的方向来绘制,因此就用到canvas的rotate(float degrees)方法,试过很多次都导致屏幕上绘制的图片都乱七八糟,不是按照想象的来的。经过了很多次的尝试终于掌握了个规律:
canvas在绘制的时候旋转遵循:
1、canvas.draw(bitmap , left , top , paint)中left 、 top始终是按照画布的坐标来的,不管如何旋转。
2、当我们调用rotate(degrees)时,首先是将前面绘制的图像显示在屏幕上(此时屏幕显示同canvas布局是一致的),然后旋转屏幕,按照canvas的坐标绘制后面的图像。
3、当我们再次调用rotate(degress)的时候,就将旋转一次后面绘制的图像显示在窗口,(注意,因为屏幕旋转过一次,因此屏幕显示的第一次旋转后的图片相对屏幕是旋转的)。
4、依次循环,每一次旋转画布,系统就会将绘制的图像绘制到屏幕,然后继续后面的绘制。
node: 为了不致于屏幕的混乱,同opengl绘图一样,当我们在绘制自己旋转后的图像时候将canvas复原,即如果说你旋转了15度,绘制完了你想绘制的图片时就再次旋转-15度。
时间: 2024-10-11 03:33:23