最近寫了一個項目試圖以ViewGroup為基礎(chǔ),以RecyclerView源碼為原型,用簡化的方式
完成RecyclerView的各項功能,源碼已上傳到github:https://github.com/shuhuaxie/MockRecyclerView,方便大家以此為基礎(chǔ)研究RecyclerView更深層次知識.
腦圖網(wǎng)址:http://naotu.baidu.com/file/b726e52cf4aad52a0bb32b07999257fc?token=c10091e420401e16 (建議在電腦上閱讀)
-
顯示
主要流程如下:
在RecyclerView的onMeasure中根據(jù)需求從Recycler中獲取View
-
對子View進行measure和layout操作
(子view的measure和layout不必和父View的對應(yīng))主要涉及類:
-
RecyclerView
提供addView方法,使用onMeasure/onLayout驅(qū)動界面展示.
-
Recycler
使用Adapter提供View對象
-
LinearLayoutManager
對View進行布局
-
滾動
onTouch事件分發(fā)
offsetTopAndBottom執(zhí)行實際的
-
點擊
onInterceptTouchEvent正確的處理點擊和滑動的邏輯
-
View復(fù)用
初次顯示界面使用onLayoutChildren
滾動界面使用scrollBy,阻止了Layout和measure
添加View到合適的相對位置,去掉不能看到的View,
然后使用offsetTopAndBottom滑動內(nèi)部的界面