2016-05-10 47 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