2016-05-10 53 views
-3

與多個工具,如鉛筆,橡皮擦,線條,橢圓形,三角形,正方形畫布創建,撤銷,重做等Android的位圖撤消重做影響

撤銷,重做不工作。

@Override 
     protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
      super.onSizeChanged(w, h, oldw, oldh); 

      mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
      mCanvas = new Canvas(mBitmap); 

} 

回答

1

我不同意第一個答案,存儲位圖非常昂貴。

你應該存儲的是動作本身。你可以創建一個新的類調用Action,並存儲繪製路徑,Paint樣式等,當用戶單擊重做按鈕時,對位圖執行動作。

我寫了一個關於油漆板的演示,它目前只支持撤銷動作,但動作存儲在列表中,你可以很容易地添加重做功能。地址是PaintView

+0

是的,存儲位圖很貴,但如果操作很複雜,有時會更簡單 – Konstantin

-1

一個使用撤消的變體 - 重做是每個操作(例如,使用哈希映射)之後存儲的位圖,然後替換當前位圖預覽的位圖(如果是撤消操作)或下一個位圖(如果此恢復操作)。正如我所知android sdk沒有默認API來做你想做的。

+0

請給我示例演示。 – Tech

+0

爲每個操作保留位圖的HashMap會很快給你一個OutOfMemoryError。 –

+0

是的,都知道。但是,如果你聰明地使用這種技術,例如不存儲多個Bitmaps,並且可能會在SSD上存儲一些內容,則不會發生這種情況。 – Konstantin