ViewPager2 简单使用
1.viewpager2概念及特点
ViewPager2 是 ViewPager 库的改进版本,可提供增强型功能并解决使用 ViewPager 时遇到的一些常见问题。
1.1 ViewPager2 的优势
- 垂直方向支持
除了支持传统的水平分页
之外,ViewPager2 还支持垂直分页。
您可以通过设置 ViewPager2 元素的android:orientation 属性
为其启用垂直分页:
<androidx.viewpager2.widget.ViewPager2xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/pager"android:orientation="vertical" />
- 从右到左支持
ViewPager2 支持从右到左 (RTL) 分页。系统会根据语言区域在适当的情况下自动启用 RTL 分页,不过您也可以通过设置 ViewPager2 元素的 android:layoutDirection 属性为其手动启用 RTL 分页:
<androidx.viewpager2.widget.ViewPager2xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/pager"android:layoutDirection="rtl" />
可修改的 Fragment 集合
ViewPager2 支持对可修改的 Fragment 集合进行分页浏览,在底层集合发生更改时调用 notifyDatasetChanged() 来更新界面。
这意味着,您的应用可以在运行时动态修改 Fragment 集合
,而 ViewPager2 会正确显示修改后的集合。DiffUtil
ViewPager2 在RecyclerView 的基础上构
建而成,这意味着它可以访问DiffUtil 实用程序类。
这一点带来了多项优势,但最突出的一项是,这意味着 ViewPager2 对象本身会利用 RecyclerView 类中的数据集更改动画
。支持嵌套的可滚动元素
在嵌套的滚动视图与包含它的 ViewPager2 对象方向相同的情况下,ViewPager2 本身并不支持该滚动视图。
例如,在垂直方向的 ViewPager2 对象内,垂直滚动视图无法滚动。
为了支持方向相同的 ViewPager2 对象内的滚动视图,如果您希望改为滚动嵌套的元素,则必须对 ViewPager2 对象调用 requestDisallowInterceptTouchEvent()
。ViewPager2 嵌套滚动示例展示了一种使用通用自定义封装容器布局解决此问题的办法。
参考:https://developer.android.com/training/animation/vp2-migration?hl=zh-cn#nested-scrollables
1.2 ViewPager2 API
//是否接收外界事件
viewPager.isUserInputEnabled
//viewpager的方向
viewPager.orientation //跳转到指定位置,是否有平滑效果
viewPager.setCurrentItem(card, smoothScroll)//页面切换的时候,执行动效
viewPager.setPageTransformer(mAnimator)/*** PageTransformer 是个接口,* 重写方法transformPage(view ,pos)**/
private val mAnimator = ViewPager2.PageTransformer { page, position ->val absPos = Math.abs(position)page.apply {//设置view的rotationthis.rotation = if (rotateCheckBox.isChecked) position * 360 else 0f//设置view的tranlationXYthis.translationY = if (translateY) absPos * 500f else 0fthis.translationX = if (translateX) absPos * 500f else 0fif (scaleCheckBox.isChecked) {val scale = if (absPos > 1) 0F else 1 - absPos//设置view的scaleXYthis.scaleX = scalethis.scaleY = scale} else {this.scaleX = 1fthis.scaleY = 1f}}
}
2 使用方式
2.1 viewpager2+ view
使用viewpager+recycler.Adapter
+view的形式完成
class CardViewAdapter : RecyclerView.Adapter<CardViewHolder>() {override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {return CardViewHolder(CardView(LayoutInflater.from(parent.context), parent))}override fun onBindViewHolder(holder: CardViewHolder, position: Int) {holder.bind(Card.DECK[position])}override fun getItemCount(): Int {return Card.DECK.size}
}class CardViewHolder internal constructor(private val cardView: CardView) :RecyclerView.ViewHolder(cardView.view) {internal fun bind(card: Card) {cardView.bind(card)}
}open class CardViewActivity : BaseCardActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//设置适配器viewPager.adapter = CardViewAdapter()}
}
2.2 viewpager2+ fragment
viewpager2+FragmentStateAdapter
+fragment
viewPager.adapter = object : FragmentStateAdapter(this) {override fun createFragment(position: Int): Fragment {return CardFragment.create(Card.DECK[position])}override fun getItemCount(): Int {return Card.DECK.size}}
2.3 viewpager2+ tablayout
主要借助于TabLayoutMediator类绑定tablayout和viewpager2
tabLayout = findViewById(R.id.tabs)TabLayoutMediator(tabLayout, viewPager) { tab, position ->tab.text = Card.DECK[position].toString()}.attach()
ViewPager2 简单使用相关推荐
- Android中的ViewPager2
文章目录 1 ViewPager2简介 1.1 ViewPager2应用场合 1.2 ViewPager2应用背景 2 应用案例 2.1 图片轮播 2.2 导航 1 ViewPager2简介 1.1 ...
- 安卓APP_ Fragment(5)—— Fragment + ViewPager2 模拟微信首页 (2)两者联动翻页
摘自:安卓APP_ Fragment(5)-- Fragment + ViewPager2 模拟微信首页 (2)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-22 00:11 ...
- 安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页
摘自:安卓APP_ Fragment(4)-- Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-20 17:46 ...
- Android开发笔记(一百七十二)第二代翻页视图ViewPager2
正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager.与ViewPager相 ...
- 【Android】RecycleView简单仿漫画APP图片相关样式
真的真的想不到起什么标题好了,这次的内容真的是太简单了,没有什么挑战性,一天以内就完成了.最近在学kotlin,也会有一份kotlin的代码,鉴于很多人都是从java开始进行android开发的,ko ...
- ViewPage2简单使用
为了解决ViewPager的懒加载问题,搜了一圈发现谷歌推出了升级版ViewPager2,貌似自带就懒加载.升级也十分简单 build.gradle 添加依赖 implementation " ...
- TabLayout+ViewPager2联动
以前,viewpager+tablayout联动,只需要以下两行代码就解决, mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnP ...
- RecyclerView与ViewPager2
RecyclerView与ViewPager2 文章目录 RecyclerView与ViewPager2 1:RecyclerView 1.1:基本使用方法 1.1.1定制 RecyclerView ...
- ViewPager2和Fragment的组合使用
2019年11月20号,期待已久的ViewPager2 正式版终于发布了! 一.ViewPager2的新特性 ViewPager2从名字就可以看出来它是ViewPager的升级版,既然是升级版那么它相 ...
最新文章
- javascript设计模式之观察者模式
- CRI-O将如何把Kubernetes推上容器生态系统的中心位置
- Android中使用画笔和画布绘制一个矩形
- 深入理解ES6 pdf
- 播放RTMP协议的流媒体的几种选择 1
- Matlab学习记录 1
- androidStudio导入库文件
- ubuntu指向python3_ubuntu安装python3.7,并更新python默认指向为python3.7
- 【2018.06.21学习笔记】【linux高级知识 14.1-14.3】
- java gson json_Java利用gson处理json字符串
- 咚咚咚————【Matlab】单片机读取摄像头回传的RGB数组绘制图片
- 英国政府将投资11.4亿英镑部署FTTP和开发5G
- 项目沟通管理 试题分析
- 1、STM32通过软件IIC连接ADXL345(ADXL345使用遇到的一些坑)
- SQL and NOSQL
- 计算机游戏33关,史上最难游戏?这个游戏推出了35年,玩家最多也只能通到33关!...
- Python实现统一社会信用代码校验(GB32100-2015)
- BLE Mesh (9) —— Mesh beacons
- HIDS反弹shell检测方法
- 对项目工时的估算----( PERT “计划评审技术” ) 三点估算法