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 简单使用相关推荐

  1. Android中的ViewPager2

    文章目录 1 ViewPager2简介 1.1 ViewPager2应用场合 1.2 ViewPager2应用背景 2 应用案例 2.1 图片轮播 2.2 导航 1 ViewPager2简介 1.1 ...

  2. 安卓APP_ Fragment(5)—— Fragment + ViewPager2 模拟微信首页 (2)两者联动翻页

    摘自:安卓APP_ Fragment(5)-- Fragment + ViewPager2 模拟微信首页 (2)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-22 00:11 ...

  3. 安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页

    摘自:安卓APP_ Fragment(4)-- Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-20 17:46 ...

  4. Android开发笔记(一百七十二)第二代翻页视图ViewPager2

    正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager.与ViewPager相 ...

  5. 【Android】RecycleView简单仿漫画APP图片相关样式

    真的真的想不到起什么标题好了,这次的内容真的是太简单了,没有什么挑战性,一天以内就完成了.最近在学kotlin,也会有一份kotlin的代码,鉴于很多人都是从java开始进行android开发的,ko ...

  6. ViewPage2简单使用

    为了解决ViewPager的懒加载问题,搜了一圈发现谷歌推出了升级版ViewPager2,貌似自带就懒加载.升级也十分简单 build.gradle 添加依赖 implementation " ...

  7. TabLayout+ViewPager2联动

    以前,viewpager+tablayout联动,只需要以下两行代码就解决, mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnP ...

  8. RecyclerView与ViewPager2

    RecyclerView与ViewPager2 文章目录 RecyclerView与ViewPager2 1:RecyclerView 1.1:基本使用方法 1.1.1定制 RecyclerView ...

  9. ViewPager2和Fragment的组合使用

    2019年11月20号,期待已久的ViewPager2 正式版终于发布了! 一.ViewPager2的新特性 ViewPager2从名字就可以看出来它是ViewPager的升级版,既然是升级版那么它相 ...

最新文章

  1. javascript设计模式之观察者模式
  2. CRI-O将如何把Kubernetes推上容器生态系统的中心位置
  3. Android中使用画笔和画布绘制一个矩形
  4. 深入理解ES6 pdf
  5. 播放RTMP协议的流媒体的几种选择 1
  6. Matlab学习记录 1
  7. androidStudio导入库文件
  8. ubuntu指向python3_ubuntu安装python3.7,并更新python默认指向为python3.7
  9. 【2018.06.21学习笔记】【linux高级知识 14.1-14.3】
  10. java gson json_Java利用gson处理json字符串
  11. 咚咚咚————【Matlab】单片机读取摄像头回传的RGB数组绘制图片
  12. 英国政府将投资11.4亿英镑部署FTTP和开发5G
  13. 项目沟通管理 试题分析
  14. 1、STM32通过软件IIC连接ADXL345(ADXL345使用遇到的一些坑)
  15. SQL and NOSQL
  16. 计算机游戏33关,史上最难游戏?这个游戏推出了35年,玩家最多也只能通到33关!...
  17. Python实现统一社会信用代码校验(GB32100-2015)
  18. BLE Mesh (9) —— Mesh beacons
  19. HIDS反弹shell检测方法
  20. 对项目工时的估算----( PERT “计划评审技术” ) 三点估算法

热门文章

  1. in_addr和in6_addr结构体
  2. find7 android 5,没开玩笑 OPPO Find 5抵价1200换Find 7
  3. RMP安装ImageMagick
  4. 三十二、ARP协议、DHCP协议、ICMP协议
  5. C语言编写web server
  6. 怎么获得boll指标详解?教你如何整理boll指标详解
  7. 大数据时代下金融行业市场的开发分析
  8. 相比手机操作、语音助手,智能传感器有什么优点?
  9. VB.net学习笔记(二十六)线程的坎坷人生
  10. 系统引导修复,grub2下的各种骚作