android view viewgroup使ondraw和draw无效

时间:2013-02-21 22:27:13

标签: android view ondraw

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

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

如果这是真的,那么mapview的onDraw和draw方法何时被称为?

更重要的是所有这些观点以及哪些方法在任何地方都能很好地记录?

谢谢!

修改 This SO post解释说,对于扩展ViewGroup的类,不会自动调用onDraw方法。如果需要,你必须强迫它。但正如ebarrenchea指出的那样,顺序是绘制,onDraw,dispatchDraw如果调用所有方法

2 个答案:

答案 0 :(得分:1)

在您的视图组上调用invalidate会强制draw运行,然后再调用onDraw,然后dispatchDraw。您应该查看视图文档here和查看源代码here以获取更多信息。

答案 1 :(得分:0)

必须从UI线程调用

invalidate()才能导致onDraw()。尝试使用与postInvalidate()具有相同效果的invalidate(),但可以使用非UI线程。