初识ViewPager2
ViewPager2是Google于2019年2月7号发布的ViewPager的升级版本,目前最新版本是1.0.0-alpha01。ViewPager2主要解决了传统ViewPager中的几个问题:
- 不支持从右到左布局
- 不支持纵向滚动
- notifyDataSetChanged()有时不起作用的Bug
实现原理
查看ViewPager2内部代码可以看出,其实现原理是在其内部封装了一个RecyclerView,利用LinearLayoutManager+PagerSnapHelper实现了ViewPager的滚动效果以及对纵向滚动的支持。
1 | public class ViewPager2 extends ViewGroup { |
目前存在的问题:
由于直接使用的RecycleView实现,一些ViewPager的特性没有得到完全实现,官方指出了下面几个问题:
- 不支持设置offscreen limit
- 与TabLayout的集成存在问题
- FragmentStateAdapter还有稳定性问题
- 不支持设置pageWitch,默认100%/100%
- 不支持clipToPadding
- 不支持fakeDrag
- 设置page transformer时,不支持设置绘制顺序
使用方法:
其使用方法与传统ViewPager类似:
1.在模块gradle中添加依赖:
1 | implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01' |
2.在Layout文件中布局,这里可以设置滚动方向:
1 | <androidx.viewpager2.widget.ViewPager2 |
3.创建Adapter,ViewPager2使用FragmentStateAdapter来实现Fragment的管理:
1 | public class ViewPager2Adapter extends FragmentStateAdapter { |
4.应用Adapter:
1 | viewPager2 = findViewById(R.id.viewpager2); |
总结
ViewPager2具有原生支持垂直方向滑动的特性,但是由于目前FragmentStateAdapter还有稳定性问题,以及设置page transformer时,不支持设置绘制顺序,在实际应用时还需要多进行修改和测试。建议等官方推出稳定版本后,再考虑接入。
参考:
[1] https://developer.android.com/jetpack/androidx/releases/viewpager2
[2] https://developer.android.google.cn/reference/androidx/viewpager2/adapter/FragmentStateAdapter
[3] https://developer.android.google.cn/reference/androidx/viewpager2/widget/ViewPager2