我有一个自定义ViewGroup,它有几个子视图,也是自定义视图。在子视图中调用invalidate()
可以正常工作,除非我在ViewGroup的构造函数外添加视图。例如,如果异步任务完成,onPostExecute
导致添加新视图。对于该新视图,对invalidate
的调用无法导致绘制对象。该视图中的其他所有内容都可以正常工作(我可以看到它,单击它可以工作,如果其他内容调用onDraw它会发生变化),但调用invalidate不会导致onDraw
被调用。
我已经在UI线程上检查了长/昂贵的循环,但没有。此外,在子节点或父节点中设置setWillNotDraw(false)
都不起作用。
这是项目(抱歉它很大)。 https://github.com/PeterMitrano/Climb/tree/last_working_invalidate/climb。父视图为GymMapView
,RouteLabelView
是无效视图具有奇怪行为的子视图。我在RouteLabelView
MapActivity.onGymsFound()
无效的回调
我花了大约8个小时调试这个,我仍然无能为力,所以任何帮助都表示赞赏。
更新:我发现它实际上是因为layout()
没有被调用,只会在onSizeChanged
中发生。所以问题是,我可以以某种方式强制onSizeChanged
被调用吗?或者我应该在添加新的子视图时手动调用layout
吗?