Android invalidate requestLayout forceLayout

Invalidate

只是讓draw失效,不涉及measure、layout
在這裏插入圖片描述

forceLayout requestLayout

  • forceLayout只是標記view,下次遍歷一定measure,但是不發起遍歷。
  • requestLayout 標記一定measure後,還想父佈局傳遞,發起一次遍歷
public void forceLayout() {
    if (mMeasureCache != null) mMeasureCache.clear();
    mPrivateFlags |= PFLAG_FORCE_LAYOUT;
    mPrivateFlags |= PFLAG_INVALIDATED;
}
public void requestLayout() {
    if (mMeasureCache != null) mMeasureCache.clear();
    ...
    mPrivateFlags |= PFLAG_FORCE_LAYOUT;
    mPrivateFlags |= PFLAG_INVALIDATED;

    if (mParent != null && !mParent.isLayoutRequested()) {
        mParent.requestLayout();
    }
    ...
}

總計

  • invalidate 針對draw
  • forceLayout 強制下一次遍歷時,measure該view,但不知道什麼時候遍歷
  • requestLayout,強制measure,併發起一次遍歷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章