ViewGroup 添加移除View 常用几种方式的区别

简单来说ViewGroup 维护一个子类的View 数组

  1. attachViewToParent 和 DetachViewToparent 是直接操作这个数组,不会去调用requestlayout 去重绘。
  2. removeView 和 addView 会主动调用requestlayout 和 invalidate 去强制重绘。
  3. removeViewInLayout 和 addViewInLayout 不会去调用 requestLayout 和 invalidate 所以可以有效的在onlayout方法中调用。

2 和 3 都会通过 addViewInner 和 removeViewInternal 去操作
第一种方式 通过 addInArray 和 removeFromArray 直接去 修改 子view的数组

如果是通过 addviewinner 和 removeViewInternal 会促发 layouttransition 做动画效果 还会 触发一些回调 并调用 子view的attachwindow 和 detachwindow 然后 也会进行 addInArray 和 removeFromArray 去修改数组。

所以如果 只是单纯的数据变化 使用 attachViewtoParent 和 detachViewtoParent 不会对 子view 做变化。只是简单的移出 viewGroup的显示 attach 还是最好 配合 detach使用 因为 添加一个子view应该还需要做下子viewAttach操作 具体 相关代码 可能在attachInfo 之中找到关

然后这个子view数组 对viewgroup显示有什么影响呢 ?
viewgroup dispatchdraw 会使用 这个来对每个子view分派draw事件

所以动态添加view时选择合适的方式进行添加

你可能感兴趣的:(android开发)