安卓SurfaceView onDraw问题

4

我的SurfaceView的onDraw方法会根据屏幕上的TouchEvents绘制一系列路径,我想添加一个撤销功能,可以从LinkedList中删除最后一个路径节点。当点击按钮时,路径将从列表中删除,但是SurfaceView不会立即更新,除非再次点击撤销按钮或触摸屏幕。

谢谢, Eric


你可以试着提出一个具体的问题,展示一些相关的代码,并将对你先前问题的好答案标记为已接受。 - kabuko
2个回答

3

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

你应该使用:

postInvalidate();

不是

invalidate();

postInvalidate();告诉主UI线程在下一个方便的时间重新绘制。以你目前的方式进行操作在一个独立的线程中将不起作用。


0

这是因为视图仅在调用onDraw()时更新,该方法会在屏幕活动(例如您触摸屏幕)或程序强制要求更新时发生。

如果您想进行强制更新,请使用从View继承的invalidate()方法。

如果删除操作发生在SurfaceView中,请在完成删除后书写invalidate()。如果它发生在外部,则只需执行surfaceViewInstance.invalidate()。

希望能对您有所帮助。


我尝试在SurfaceView内部使用invalidate,但它仍然没有更新。OnDraw在线程中每60毫秒调用一次,但它并没有在那里更新,这让我感到困惑。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接