Android画布还原在翻译后不工作

Android画布还原在翻译后不工作,android,canvas,Android,Canvas,我正在使用Canvas开发一个2dandroid应用程序。我有几个屏幕,每个屏幕都有不同的坐标原点。为了实现这一点,我目前正在使用Canvas.translate(x,y)。当应用程序启动时,我调用canvas.save()来存储原始状态。当我移动到屏幕时,我需要重置画布平移,然后应用新的平移,以便新的平移相对于原始的0,0。基本上,当进入新屏幕时,我调用: canvas.restore(); //to undo the current translation canvas.save(

我正在使用Canvas开发一个2dandroid应用程序。我有几个屏幕,每个屏幕都有不同的坐标原点。为了实现这一点,我目前正在使用Canvas.translate(x,y)。当应用程序启动时,我调用canvas.save()来存储原始状态。当我移动到屏幕时,我需要重置画布平移,然后应用新的平移,以便新的平移相对于原始的0,0。基本上,当进入新屏幕时,我调用:

canvas.restore();      //to undo the current translation
canvas.save();         //to save again the original state of canvas
canvas.translate(x, y) //to apply the needed translation
我在第一个屏幕上工作得很好,但在第二个屏幕上,显然对restore()的调用并没有回滚翻译,而是相对于前一个屏幕进行翻译


我遗漏了什么吗?

可能是save和restore调用的顺序错误。在还原函数之前,应始终调用Save。您可以简单地执行canvas.setTransform(1,0,0,1,0,0)。这会将变换矩阵重置为其原始形式,但会保持其他上下文变量不变


希望有帮助。

调用restore()和save()的顺序正确。以错误的顺序调用它们会引发异常。此外,没有像canvas.setTransform这样的方法。你是说canvas.setMatrix吗?嗯,我在这里混合技术。我指的是android HTML5画布。对不起。无论如何,在Android画布上,您有一个setMatrix方法可以实现这一点。试着设置一个标识矩阵,这应该可以。不要忘记在每个屏幕的最后一次绘制之后调用restore,因为图形上下文就像一个堆栈一样工作。