先上图看现场

在做字体设置式 发现app内这个展示模块出现了这个内容重叠的现象,吓人 先找到这个view 看下实现方式:
1.外层是一个LinearLayout布局 ,展示时 根据服务下发数据往其中通过 addView(View child) 的方式加入;
2在修改了字号后 刷新列表时 会先调用ViewGroup.removeAllViews();再addView(child);
逻辑上没啥问题啊???(小朋友我有很多问号)
排查问题:用layoutInspector 看看里面到底有几个孩子 业务上add了4个view;mChildren里也是4个view 对啊?那那那重叠的那个是啥。。。。再看看LinearLayout中其他属性,有没有什么线索。。。。突然看到一个mDisappearingChildren的listsize=1;
看看这是个什么

看来这个removeAllView不简单 要看看源码实现,在删除逻辑中有这么一段代码:如果子view在执行动画(案例中的表情是循环动画)则把这个view保存mDisappearingChildren

在viewGroup的draw逻辑中果然找到了这个重叠的view被画上去了

原因找到了:执行动画的view是不会被ViewGroup被立即remove掉的,等动画结束后才会被remove;解决办法就是先把子view的动画先结束 再执行removeAllView。
网友评论