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時選擇合適的方式進行添加

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章