查看了源碼,簡單記一下。
資源控制:
ListView中的特點是可以複用item,節省內存空間。
複用的原理是,凡是滾出屏幕的viewItem都會被放在一個RecycleBin中,等待回收。這裏的ViewItem是和ListView沒有關聯的。
當滾動需要跟上顯示一個Item時,就從RecycleBin中取得一個View(能爲空),放在需要的位置。
滾動原理:
View的畫布是無限大的(沒有定義畫布的寬和高),並且和父View使用的是同一個畫布(也就是說,頁面上所有View同一個畫布),只有座標系不同。
每一個View的繪圖位置由父View指定,大小由高寬決定。當一個子View相對於父View產生滾動時,父View會給被滾動的View重新指定座標,從而產生滾動效果。
所以,一個View在“滾動”時,實際上是改變這個View在畫布的上的座標位置(從座標原點開始繪圖,就是View左上角在畫布總的位置。)
ListView中的滾動,ListView是父View,每一個ItemView是子View。
當某一個ItemView的座標位置超出了ListView的邊界,ItemView不會被畫在畫布上,而是被RecycleBin回收。
當需要滾進一個ItemView時,則從RecycleBin中取出一個被回收的ItemView(沒有就創建一個新的),繪製在指定的畫布位置上。