1

我在我的 Android 应用程序上制作了一个简单的白板,用户可以在其中绘制一些东西。我想添加一个撤消功能,以便他能够回到他之前的操作。

在我的Touch Start活动中,我添加了以下代码,它基本上将当前画布添加到一个ArrayList并创建一个新画布以避免相同的引用。

previousDrawing.add(this.canvas);
this.canvas = new Canvas(this.bitmap);

然后,在我的undo方法中,我添加了以下代码:

if (previousDrawing.size() > 0)
{
     // Remove last
    this.canvas = previousDrawing.remove(previousDrawing.size() - 1);
    this.canvas.setBitmap(this.bitmap);
}

它根本不起作用。我的意思是,我可以使用this.canvas.drawPath(this.path, this.paint);但不能保存和恢复以前的画布在我的画布上绘图。

你能帮我做吗?

提前致谢。

编辑: 我也尝试过使用saveLayer method. 但是当我保存时,我不再能够在画布上绘图。这是正常行为吗?

4

2 回答 2

3

尝试drawBitmap代替setBitmap

this.canvas.drawBitmap(this.bitmap, 0, 0, null);

编辑

if (previousDrawing.size() > 0)
{
     // Remove last
    this.bitmap = previousDrawing.get(previousDrawing.size() - 1);
    this.canvas.drawBitmap(this.bitmap, 0, 0, null);
    previousDrawing.remove(previousDrawing.size() - 1);
}

参考链接

于 2013-02-06T15:59:16.557 回答
0

画布不保存像素。位图可以。所以保存和恢复画布是没有用的。您可以保存和恢复位图,但这是非常消耗内存的操作。

您最好记录用户绘图操作。要回到历史,您应该重新绘制除最后一个之外的所有动作。为了使其更快,您可以保留几个关键历史位图。因为从头开始重绘所有内容很慢......

于 2013-02-06T15:55:23.673 回答