登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 113|回复: 0

ViewPager2:官方Viewpager升级版来临

[复制链接]

3

主题

3

帖子

22

安币

初级码农

Rank: 1

发表于 2019-5-20 09:55:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-963414-80094.html

这两天浏览安卓开发者官网的时候,发现google悄然推出了一个新的控件:[ViewPager2](https://developer.android.google.cn/reference/androidx/viewpager2/widget/ViewPager2) ,一看名称就知道这是一个和我们常用的 [ViewPager](https://developer.android.google.cn/reference/androidx/viewpager/widget/ViewPager) 功能相似的控件,算是ViewPager的升级版吧。目前还只是推出了第一个预览版,我们可以直接引入来使用了:```implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha04'```我们先来看看有哪些功能和使用上的变化:https://developer.android.google.cn/jetpack/androidx/releases/viewpager2**新功能:**- 支持RTL布局- 支持竖向滚动- 完整支持```notifyDataSetChanged```**API的变动:**- ```FragmentStateAdapter```替换了原来的 ```FragmentStatePagerAdapter```- ```RecyclerView.Adapter```替换了原来的 ```PagerAdapter```- ```registerOnPageChangeCallback```替换了原来的 ```addPageChangeListener```看了上面这些介绍,有一点比较吸引人的就是支持竖向滚动了,这是怎么实现的呢?```ViewPager2```的源码不长,我们来简单分析一下。#### 简单解析通过查看源码得知,ViewPager2是直接继承ViewGroup的,意味着和ViewPager不兼容,类注释上也写了它的作用是取代ViewPager,不过短时间内ViewPager应该还不会被废弃掉。继续查看源码,发现了两个比较重要的成员变量:```java    private RecyclerView mRecyclerView;    private LinearLayoutManager mLayoutManager;```所以很清楚得知,ViewPager2的核心实现就是```RecyclerView``` ```LinearLayoutManager```了,因为```LinearLayoutManager```本身就支持竖向和横向两种布局方式,所以ViewPager2也能很容易地支持这两种滚动方向了,而几乎不需要添加任何多余的代码。其实在此之前也不乏有大神采用RecyclerView来实现轮播图效果的,具体实现发生略有不同,但大体思想是一致的。这次ViewPager2的推出意味着这种方法终于被扶正了。为了让RecyclerView变得像原来的ViewPager,需要设置下```SnapHelper```:```java    new PagerSnapHelper().attachToRecyclerView(mRecyclerView);```熟悉RecyclerView的同学都知道,SnapHelper用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。PagerSnapHelper的作用让滑动结束时使当前Item居中显示,并且 限制一次只能滑动一页,不能快速滑动,这样就和viewpager的交互很像了。另外和```viewpager```一样,```viewpager2```可以承载fragment,我们需要继承实现它提供的```FragmentStateAdapter```:```javapublic abstract class FragmentStateAdapter extends        RecyclerView.Adapter implements StatefulAdapter```这是一个包含```FragmentManager```和数据状态恢复功能的```RecyclerView.Adapter```,具体实现可以参看源码。所以大家也可以用```TabLayout ViewPager2 Fragment```来实现联动展示效果。#### 使用通过```android:orientation```来指定滚动方向```xml  ```在代码中设置一个普通的RecyclerView.adapter:```java   ViewPager2 viewPager2=findViewById(R.id.viewpager2);           RecyclerviewAdapter adapter = new RecyclerviewAdapter(this);   viewPager2.setAdapter(adapter);```这样竖直轮播图就大功告成了。#### 小结viewpager2利用recyclerview来实现viewpager的功能,无疑使使其可扩展性大大提升,代码也变得更优雅简洁,使用起来也更灵活。不过目前viewpager2只是第一个预览版,还存在稳定性方面的问题,不建议大家引入到正式项目中来,尝尝鲜就好。  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-963414-80094.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表