ViewPager改造其中的预加载

大家都知道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的数据适配器里有3个View

当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页


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值