【问题标题】:Android Bitmap Undo Redo Effect [closed]Android位图撤消重做效果[关闭]
【发布时间】:2016-05-10 04:56:57
【问题描述】:

使用铅笔、橡皮擦、线条、椭圆、三角形、正方形、撤消、重做等多种工具创建画布。

撤消,重做不起作用。

  @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);

}

【问题讨论】:

    标签: android view bitmap android-canvas undo-redo


    【解决方案1】:

    我不同意第一个答案,存储位图非常昂贵。

    你应该存储的是action本身。你可以创建一个新的类调用Action,并存储绘图路径,Paint style等。当用户点击redo按钮时,在位图上执行动作。

    我写了一个关于画板的demo,目前只支持撤销动作,但是通过将动作存储在一个List中,你可以很容易地给它添加redo功能。地址是PaintView

    【讨论】:

    • 是的,存储位图很昂贵,但如果操作复杂,有时会更简单
    【解决方案2】:

    使用 undo - redo 的一种变体是在每个动作之后存储位图(例如使用 HashMap),然后将当前位图替换为预览位图(如果是撤消操作)或下一个位图(如果是此重做操作)。据我所知,android sdk 没有默认的 api 来做你想做的事。

    【讨论】:

    • 请给我示例演示。
    • 为每个操作保留一个位图的 HashMap 会很快给你一个 OutOfMemoryError。
    • 是的,大家都知道。但是如果你巧妙地使用了这项技术,例如不存储多个 Bitmap,并且可能将一些存储在 ssd 上,就不会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2013-03-25
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多