ListView學習


更新:2017-1-28 理解一


概述

其中在自定義ListView中涉及到如何動態加載佈局,即XML流→實例化佈局得到View對象,便於實現該佈局中的各個控件。

以及:

ListView工作原理

ListView性能優化


理解一、Android視圖繪製流程

onMeasure()具體步驟:

http://blog.csdn.net/u013480581/article/details/54783399
更新:2017-1-30


onLayout()具體步驟:

  1. ViewRoot的performTraversals()方法會在measure結束後繼續執行,並調用View的layout()方法。

    • 實現host.layout(0, 0, host.mMeasuredWidth, host.mMeasuredHeight); 四個參數,分別代表着左、上、右、下的座標(相對於當前視圖的父視圖而言),其中measure中測量得到的寬度和高度
  2. layout()方法,首先會調用setFrame()方法來判斷視圖的大小是否發生過變化,需不需要重繪

  3. layout()方法onLayout(changed, l, t, r, b)方法回調
    • View中的onLayout()方法就是一個空方法
    • ViewGroup中的onLayout()方法竟然是一個抽象方法protected abstract void onLayout(boolean changed, int l, int t, int r, int b);
    • ViewGroup的子類都必須重寫這個方法。LinearLayout和RelativeLayout在內部按照各自的規則對子視圖進行佈局

getWidth()方法和getMeasureWidth()方法的區別

  • getMeasureWidth()方法在[1.4]measure()過程結束後就可以獲取到了,而getWidth()方法要在[2.1]layout()過程結束後才能獲取到。
  • getMeasureWidth()方法中的值是通過[1.7]setMeasuredDimension()方法來進行設置的,而getWidth()方法中的值則是通過視圖右邊的座標減去左邊的座標計算出來的。

onDraw()具體步驟:

具體見:(引用)http://blog.csdn.net/xx326664162/article/details/49494207


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