美文网首页Android开发积累
Android App无限循环Viewpager和Tablayo

Android App无限循环Viewpager和Tablayo

作者: 听海人 | 来源:发表于2019-01-18 19:23 被阅读150次

Android中Viewpager和Tablayout是最常用的组件。

这里我将介绍这两个组件组合无限循环的实现方式。

直接看代码的童鞋可以看看gihub。

https://github.com/cuichanghao/infivt

先看看效果图


ezgif.com-crop.gif

思路:

因为是无限循环,我们要模拟无限。当然不是真正的无限循环,而是模拟下。

模拟

我在InfinitePagerAdapter定义一个循环1000遍。
如果你的tab有5个项目,我们会创建5000个tab。
对于普通用户来说这已经足够了。
起始位置设置为中间点2500左右。

边界检测

当然有可能会有变态用户,想看看有没有边界。为了防止这个情况,我们可以检测边界,如果触发检测,那我们重新设置位置为2500左右。
InfiniteViewPager - setCurrentItem()

减少内存使用

如果有5000个fragment作为viewpager或tabitem的话,那真是作死。
我们得想办法复用。

Tablayout复用

使用RecyclerTabLayout来复用同一个项目。你知道的,RecyclerView是可以复用的。这里其实是使用RecyclerView重新发明了TabLayout。

ViewPager的Item复用

通常情况下viewPager的Adapter是FragmentStatePagerAdapter/FragmentPagerAdapter。
这样的话会有一个问题就是每次会产生Fragment的add和remove的创建/销毁的情况,因为开销比较打,这样的体验就是每次都会看到重新加载一遍。

可能有人会说可以使用setOffscreenPageLimit设置为1以上来同时加载啊。问题是我们有5000个Fragment,你的app会变得很慢。

所以这里用FragmentCachePagerAdapter循环使用同一个fragment,只进行Fragment的show/hide的切换。

滚动效果

你已经看到上面的图的Tablayout的滑动效果。
这个是在RecyclerTabLayout里通过ViewPagerOnPageChangeListener监听Viewpager的滚动事件,每次很小的滚动都会触发scrollToTab -> invalidate -> onDraw的链条,在onDraw里我们就会根据滚动量,进行细微的描绘调整。

结尾

详情请看上面的github代码。
如果你只想使用这个库,那就引用下。

implementation 'com.github.cuichanghao:infivt:<最后commit的id>'

相关文章

网友评论

    本文标题:Android App无限循环Viewpager和Tablayo

    本文链接:https://www.haomeiwen.com/subject/ftcodqtx.html