我的 SurfaceView 的 onDraw 方法绘制的是由屏幕上的 TouchEvents 确定的路径的 LinkedList。我想添加一个撤消功能,从 LinkedList 中删除最后一个路径节点。当按下按钮时,路径会从列表中删除,但 SurfaceView 不会更新,直到我再次按下撤消按钮或触摸屏幕。
谢谢,埃里克
我的 SurfaceView 的 onDraw 方法绘制的是由屏幕上的 TouchEvents 确定的路径的 LinkedList。我想添加一个撤消功能,从 LinkedList 中删除最后一个路径节点。当按下按钮时,路径会从列表中删除,但 SurfaceView 不会更新,直到我再次按下撤消按钮或触摸屏幕。
谢谢,埃里克
OnDraw 在线程中每 60 毫秒调用一次,但它没有在那里更新,这让我感到困惑。
你应该使用:
postInvalidate();
不是
invalidate();
postInvalidate();
告诉主 UI 线程在下一个方便的时间重绘。您这样做的方式不适用于单独的线程。
这是因为仅在调用 onDraw() 时才会更新视图,这是由于屏幕活动(例如您触摸它)或以编程方式强制这样做时发生的。
你想强制它:使用从 View 继承的 invalidate() 方法。
如果删除发生在 SurfaceView 内部,只需在删除完成后编写 invalidate() 即可。如果它发生在外面,那么只需执行 surfaceViewInstance.invalidate()。
希望这可以帮助