我如何使用canvas.save和canvas.restore?

时间:2012-01-23 07:45:12

标签: java android android-canvas

  

可能重复:
  Can i save lots of bitmaps to one bitmap? (2d)

我想知道canvas.save和canvas.restore是如何工作的。

我希望它如何工作,以及我如何使用它(但不起作用)。

  1. 锁定画布
  2. 使用unlockandpost做一些绘图
  3. canvas.save()(存储int)
  4. 做一些图纸
  5. 发布画布
  6. 从第3步恢复画布
  7. 再做一些图纸,从6(循环)重复
  8. 我真正需要的是在某个阶段(背景)保存我的画布,然后在它上面绘制对象,而不必每次我想要更新我的画布时绘制背景。

2 个答案:

答案 0 :(得分:9)

Canvas.save()& restore()不作用于附加到画布的位图...它们用于控制画布绘制环境的各个方面,特别是当前剪切区域和矩阵。

如果你想画一个旋转的精灵,你可以使用save()并恢复。要做到这一点,你首先保存()当前的画布状态,然后你翻译(),以便原点 - 像素地址(0,0) - 你想要精灵去的地方,然后你旋转(),然后你可以drawBitmap()。最后,您可以将绘图环境恢复()恢复正常。

所以你每次都注定要画背景。如果这是一个复杂的操作,请将其存储在屏幕外位图中。只要背景可以在单个操作中绘制(比如说drawBitmap),性能不应该受到太大影响。

答案 1 :(得分:0)

好的,所以我明白了。 我可以使用画布将包含大量图像的背景绘制到一个位图,非常简单。

首先创建一个具有所需int高度和int宽度的空位图,这将是您将绘制所有图块的位图(小图像)。

位图背景= Bitmap.createBitmap(width,heigth,Bitmap.Config.ARGB_4444);

(不确定语法Bitmap.Config.ARGB_4444,使用工具提示) 然后使用新的Canvas(位图)创建一个画布,这将使画布写入位图。

Canvas canvas new Canvas(背景);

现在您可以根据需要编写画布,所有这些都将存储在位图中供以后使用。