CoordinatorLayout分析

public class CoordinatorLayout extends ViewGroup implements NestedScrollingParent2

建立依賴

onMeasure-》prepareChildren-》dependsOn-》layoutDependsOn
測量的第一步就是確定依賴關系
prepareChildren中getResolvedLayoutParams找到支持behavior的節(jié)點,然后找出互相依賴關系(2個for掃描所有節(jié)點,兩兩對比),結果加入緩存列表
layoutDependsOn被子類覆蓋,只需要對dependency判斷返回成功,就建立依賴

視圖改變

onNestedScroll-》onChildViewsChanged-》onDependentViewChanged

child的ontouch事件里有對parent的調用

behavior實例化parseBehavior內,ThreadLocal<Map<String, Constructor<Behavior>>>存放構造函數(shù),用反射獲取構造緩存

補充androidx.core.util.Pools

private final Object[] mPool;//默認的存儲數(shù)組
private int mPoolSize;//當前剩余容量計數(shù)器

public T acquire() {
            if (mPoolSize > 0) {
                final int lastPooledIndex = mPoolSize - 1;
                T instance = (T) mPool[lastPooledIndex];
                mPool[lastPooledIndex] = null;
                mPoolSize--;
                return instance;
            }
            return null;
        }
private static Rect acquireTempRect() {
        Rect rect = sRectPool.acquire();
        if (rect == null) {
            rect = new Rect();
        }
        return rect;
    }
 public boolean release(@NonNull T instance) {
            if (isInPool(instance)) {
                throw new IllegalStateException("Already in the pool!");
            }
            if (mPoolSize < mPool.length) {
                mPool[mPoolSize] = instance;
                mPoolSize++;
                return true;
            }
            return false;
        }

        private boolean isInPool(@NonNull T instance) {
            for (int i = 0; i < mPoolSize; i++) {
                if (mPool[i] == instance) {
                    return true;
                }
            }
            return false;
        }
private static void releaseTempRect(@NonNull Rect rect) {
        rect.setEmpty();
        sRectPool.release(rect);
    }

總是從末尾獲得引用,引用賦值后使用,釋放時清空rect的值,但是存入到數(shù)組內,不釋放引用,這樣就是緩存了新建過程。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容