4

我的 SurfaceView 的 onDraw 方法绘制的是由屏幕上的 TouchEvents 确定的路径的 LinkedList。我想添加一个撤消功能,从 LinkedList 中删除最后一个路径节点。当按下按钮时,路径会从列表中删除,但 SurfaceView 不会更新,直到我再次按下撤消按钮或触摸屏幕。

谢谢,埃里克

4

2 回答 2

3

OnDraw 在线程中每 60 毫秒调用一次,但它没有在那里更新,这让我感到困惑。

你应该使用:

postInvalidate();

不是

invalidate();

postInvalidate();告诉主 UI 线程在下一个方便的时间重绘。您这样做的方式不适用于单独的线程。

于 2012-05-31T11:02:21.580 回答
0

这是因为仅在调用 onDraw() 时才会更新视图,这是由于屏幕活动(例如您触摸它)或以编程方式强制这样做时发生的。

你想强制它:使用从 View 继承的 invalidate() 方法。

如果删除发生在 SurfaceView 内部,只需在删除完成后编写 invalidate() 即可。如果它发生在外面,那么只需执行 surfaceViewInstance.invalidate()。

希望这可以帮助

于 2011-06-21T19:52:03.613 回答