我的SurfaceView的onDraw方法会根据屏幕上的TouchEvents绘制一系列路径,我想添加一个撤销功能,可以从LinkedList中删除最后一个路径节点。当点击按钮时,路径将从列表中删除,但是SurfaceView不会立即更新,除非再次点击撤销按钮或触摸屏幕。
谢谢, Eric
我的SurfaceView的onDraw方法会根据屏幕上的TouchEvents绘制一系列路径,我想添加一个撤销功能,可以从LinkedList中删除最后一个路径节点。当点击按钮时,路径将从列表中删除,但是SurfaceView不会立即更新,除非再次点击撤销按钮或触摸屏幕。
谢谢, Eric
OnDraw 每60毫秒在一个线程中被调用,但它没有在那里更新,这让我感到困惑。
你应该使用:
postInvalidate();
不是
invalidate();
postInvalidate();
告诉主UI线程在下一个方便的时间重新绘制。以你目前的方式进行操作在一个独立的线程中将不起作用。
这是因为视图仅在调用onDraw()时更新,该方法会在屏幕活动(例如您触摸屏幕)或程序强制要求更新时发生。
如果您想进行强制更新,请使用从View继承的invalidate()方法。
如果删除操作发生在SurfaceView中,请在完成删除后书写invalidate()。如果它发生在外部,则只需执行surfaceViewInstance.invalidate()。
希望能对您有所帮助。