2013-02-06 66 views
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。但是當我拯救時,我不再能夠在畫布上畫畫。這是一個正常的行爲?

回答

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

+0

對不起,它不起作用。 – Manitoba

+0

看我的編輯,嘗試使用代碼 – NaviRamyle

+0

非常感謝。它似乎在工作。祝你今天愉快。 – Manitoba

0

畫布不支持像素。位圖呢。所以保存和恢復畫布是沒有用的。您可以保存和恢復位圖,但這是非常耗時的操作。

您最好記錄用戶繪圖操作。要回顧歷史,您應該重新繪製除最後一個之外的所有開始操作。爲了讓它更快,您可以保留幾個關鍵的歷史位圖。因爲所有從beggining重繪速度很慢...

+0

嘿,感謝您的回答。我試圖做到這一點,但我如何處理油漆顏色/寬度? – Manitoba