3

我们正在尝试编写自己的 MapView,我正在尝试弄清楚向 mapview 添加叠加层如何导致它们在其他映射 API 中被绘制

我有一个扩展 ViewGroup 的 MapView。我想我已经发现调用 MapView.invalidate() 会导致调用 mapview 的 dispatchDraw 方法。这听起来正确吗?

如果是真的,mapview 的 onDraw 和 draw 方法是什么时候调用的?

更重要的是,所有这些观点以及在任何地方都记录良好的情况下调用了哪些方法?

谢谢!

编辑 这篇 SO 帖子解释说,对于扩展 ViewGroup 的类,不会自动调用 onDraw 方法。如果你需要它,你必须强迫它。但是正如ebarrenchea指出的那样,如果调用了所有方法,则顺序是draw,onDraw,dispatchDraw

4

2 回答 2

1

调用invalidate您的视图组将强制运行,然后draw依次调用。您应该查看此处的视图文档此处 的查看源代码以获取更多信息。onDrawdispatchDraw

于 2013-02-21T22:43:57.650 回答
0

invalidate()必须从 UI 线程调用才能导致onDraw(). 尝试使用postInvalidate()应该具有与 相同的效果invalidate(),但适用于非 UI 线程。

于 2013-10-31T12:31:16.457 回答