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

Java 如何使用canvas.save和canvas.restore?,java,android,android-canvas,Java,Android,Android Canvas,可能重复: 我想知道canvas.save和canvas.restore是如何工作的 我希望它如何工作,我如何使用它(但不起作用) 锁定画布 在没有解锁的情况下进行一些绘图 canvas.save()(存储int) 再画一些画 张贴画布 从步骤3恢复画布 再画一些图,从6开始重复(循环) 我真正需要的是在某个阶段(背景)保存画布,然后在上面绘制对象,而不必每次更新画布时都绘制背景 Canvas.save()&restore()不对连接到画布的位图执行操作。。。它们的存在是为了控制画布绘制环境的

可能重复:

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

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

  • 锁定画布
  • 在没有解锁的情况下进行一些绘图
  • canvas.save()(存储int)
  • 再画一些画
  • 张贴画布
  • 从步骤3恢复画布
  • 再画一些图,从6开始重复(循环)
  • 我真正需要的是在某个阶段(背景)保存画布,然后在上面绘制对象,而不必每次更新画布时都绘制背景

    Canvas.save()&restore()不对连接到画布的位图执行操作。。。它们的存在是为了控制画布绘制环境的各个方面,特别是当前剪辑区域和矩阵

    如果想绘制旋转的精灵,可以使用save()和restore。为此,首先保存()当前画布状态,然后平移(),以便原点-像素地址(0,0)-是希望精灵移动的位置,然后旋转(),然后可以绘制位图()。最后,可以将绘图环境恢复到正常状态

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

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

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

    位图背景=Bitmap.createBitmap(宽度、高度、Bitmap.Config.ARGB_4444)

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

    画布新画布(背景)


    现在,您可以随心所欲地编写画布,所有内容都将存储在位图中供以后使用

    多谢各位。是否仍然可以从位图数组创建位图?或者是simulairNope。无论如何,你不应该需要那种捷径。。。它的简单工作是迭代一个可绘制的列表,并将每个列表绘制到画布上。好吧,使用2d数组,20行50列,每帧都要进行绘制…对,因此您可以将所有这些内容绘制一次到屏幕外位图!有什么工作流程可以遵循吗?我真的没用过这么多东西。。。有教程吗?