如果稍后添加视图,则invalidate不会调用onDraw

时间:2017-07-23 23:31:37

标签: android

我有一个自定义ViewGroup,它有几个子视图,也是自定义视图。在子视图中调用invalidate()可以正常工作,除非我在ViewGroup的构造函数外添加视图。例如,如果异步任务完成,onPostExecute导致添加新视图。对于该新视图,对invalidate的调用无法导致绘制对象。该视图中的其他所有内容都可以正常工作(我可以看到它,单击它可以工作,如果其他内容调用onDraw它会发生变化),但调用invalidate不会导致onDraw被调用。

我已经在UI线程上检查了长/昂贵的循环,但没有。此外,在子节点或父节点中设置setWillNotDraw(false)都不起作用。

这是项目(抱歉它很大)。 https://github.com/PeterMitrano/Climb/tree/last_working_invalidate/climb。父视图为GymMapViewRouteLabelView是无效视图具有奇怪行为的子视图。我在RouteLabelView

中添加MapActivity.onGymsFound()无效的回调

我花了大约8个小时调试这个,我仍然无能为力,所以任何帮助都表示赞赏。

更新:我发现它实际上是因为layout()没有被调用,只会在onSizeChanged中发生。所以问题是,我可以以某种方式强制onSizeChanged被调用吗?或者我应该在添加新的子视图时手动调用layout吗?

0 个答案:

没有答案