大家都知道ViewPager有预加载的功能,即在显示当前页时会加载左右各一个View,那源码中是如何体现的呢?
查看源码发现:ViewPager的成员变量:
private static final int DEFAULT_OFFSCREEN_PAGES = 1;继续跟踪:
private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES;继续:发现源码中在populate方法里:
final int pageLimit = mOffscreenPageLimit;并且其中有一行注释信息:
// Add and remove pages in the existing list.所以很明显,预加载和删除就是此注释后实现,对于如何实现这里暂时不做研究
注意在此注释前几个变量的赋值:
//决定最初始加载哪一页
final int startPos = Math.max(0, mCurItem - pageLimit);
//通过适配器计算共有几页
final int N = mAdapter.getCount();
//决定最后加载哪一页
final int endPos = Math.min(N-1, mCurItem + pageLimit);
当ViewPager显示第0页时:
startPos=Math.max(0,-1)=0
endPos=Math.min(2,1)=1
即此时预加载第0,1页
当ViewPager显示第1页时:
startPos=Math.max(0,0)=0
endPos=Math.min(2,2)=2
即此时预加载第0,2页
当ViewPager显示第2页时:
startPos=Math.max(0,1)=1
endPos=Math.min(2,3)=2
即此时预加载第1,,2页
所以当我们需要修改ViewPager的预加载时只要修改DEFAULT_OFFSCREEN_PAGES即可
当ViewPager显示第1页时:
startPos=Math.max(0,0)=0
endPos=Math.min(2,2)=2
即此时预加载第0,2页
本文详细解读了ViewPager预加载机制的实现原理,并通过简单的计算展示了预加载页数的调整方式。通过调整DEFAULT_OFFSCREEN_PAGES变量,可以灵活控制预加载的页面数量,提升用户体验。
729

被折叠的 条评论
为什么被折叠?



