存储绘图画布并稍后恢复

时间:2013-02-06 15:31:21

标签: android drawing android-canvas

我在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。但是当我保存时,我不再能够在画布上画画了。这是正常行为吗?

2 个答案:

答案 0 :(得分: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);
}

参考link

答案 1 :(得分:0)

画布不包含像素。位图的确如此。因此保存和恢复画布是没用的。您可以保存和恢复位图,但这是非常耗费内存的操作。

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