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

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

attachViewToParent 和 DetachViewToparent 是直接操作这个数组,不会去调用requestlayout 去重绘。
removeView 和 addView 会主动调用requestlayout 和 invalidate 去强制重绘。
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时选择合适的方式进行添加

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值