【问题标题】:Android SurfaceView onDraw QuestionAndroid SurfaceView onDraw 问题
【发布时间】:2011-09-19 19:33:14
【问题描述】:

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

谢谢, 埃里克

【问题讨论】:

  • 您可以尝试实际提出一个特定问题,显示您的一些相关代码,并将旧问题的好的答案标记为已接受。

标签: android surfaceview ondraw


【解决方案1】:

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

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

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

希望对你有帮助

【讨论】:

  • 我尝试在 SurfaceView 中使用 invalidate 但它仍然没有更新。 OnDraw 在线程中每 60 毫秒调用一次,但它没有在那里更新,这让我感到困惑。
【解决方案2】:

OnDraw 在线程中每 60 毫秒调用一次,但不会在那里更新 这让我很困惑。

您应该使用:

postInvalidate();

不是

invalidate();

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

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2011-08-04
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多