我开始使用 Android SDK 中的示例手指画应用程序来熟悉图形。最近我一直在尝试实现撤消/重做,但我尝试过的每一种方式都遇到了障碍。我找到了一些关于这个的线程,但没有一个能让我解决这些问题。这是我的主要 2 次试验:
策略一:
保存一堆路径(或画布)并在撤消时清除屏幕并重绘除最后一个路径之外的每个路径(或恢复最近的画布)。
这里的问题可能很简单,但我无法让视图重绘任何东西。如何绘制保存的路径(或恢复保存的画布)?
策略二:
每次触摸后使用 getDrawingCache() 保存一组位图。在撤消时,将最后一个位图放回去。
保存必须通过可运行的 post() 运行,因此它在 onDraw() 完成后执行(post 在 invalidate() 之后将其添加到系统消息行)。问题是当从可运行的 getDrawingCache() 运行时,总是返回绘画的初始版本,就像它在第一次之后看不到任何变化一样。
为什么从可运行对象调用 getDrawingCache() 时看不到视图的当前状态?
我已经和这个斗争了一段时间。谢谢。
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
Runnable r = new Runnable(){
@Override
public void run() {
myView.storeView();
}
};
myView.post(r);
}
public void storeView(){
historyCount++;
if(historyCount > historySize) historyCount = 6; //We don't want more than 6
history.add(Bitmap.createBitmap(myView.getDrawingCache()),historyCount);
}