我在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
。但是当我保存时,我不再能够在画布上画画了。这是正常行为吗?
答案 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)
画布不包含像素。位图的确如此。因此保存和恢复画布是没用的。您可以保存和恢复位图,但这是非常耗费内存的操作。
您最好记录用户绘图操作。要回到历史记录中,您应该重新绘制除最后一个之外的所有动作。为了加快速度,您可以保留几个关键的历史位图。因为重新绘制所有内容都很慢......