文章目录

  • ViewPager2总结
    • 概述
    • 常用API
    • ViewPager2基本使用
    • ViewPager2+TabLayout+Fragment
    • 代码下载

ViewPager2总结

概述

ViewPager2是一个增强版的ViewPager,ViewPager2是基于RecyclerView+PagerSnapHelper实现的,解决了ViewPager的一些弊端,同时加入一些新特性。

常用API

//设置分页方向
setOrientation(@Orientation int orientation)//定位指定页面
setCurrentItem(int item)
setCurrentItem(int item, boolean smoothScroll)//设置预加载页数
setOffscreenPageLimit(@OffscreenPageLimit int limit)//禁止滑动
setUserInputEnabled(boolean enabled) //模拟滑动
beginFakeDrag()
fakeDragBy(float offsetPxFloat)
//停止模拟
endFakeDrag()//全部刷新
notifyDataSetChanged();
//局部刷新
notifyItemChanged(int position)//监听页面变化
registerOnPageChangeCallback(@NonNull OnPageChangeCallback callback)
//删除监听
unregisterOnPageChangeCallback(@NonNull OnPageChangeCallback callback)

ViewPager2基本使用

class ViewPager2SimpleActivity : BaseActivity() {private lateinit var viewPager2: ViewPager2private lateinit var indicator: LinearLayout//图片资源private val mImgIds =intArrayOf(R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e)companion object {fun start(context: Context) {val intent = Intent(context, ViewPager2SimpleActivity::class.java).apply {putExtra(KEY_TITLE, "ViewPager2基本使用")}context.startActivity(intent)}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_view_pager2_simple)initView()initViewPager2()}private fun initView() {viewPager2 = findViewById(R.id.viewPager2)indicator = findViewById(R.id.indicator)}private fun initViewPager2() {val width = dp2px(10)for (i in mImgIds.indices) {val dot = View(this)dot.setBackgroundResource(R.drawable.dot_selector)val layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams(width, width))if (i != 0) {layoutParams.leftMargin = width} else {dot.isSelected = true}indicator.addView(dot, layoutParams)}viewPager2.adapter = ViewPager2Adapter(this, mImgIds)//设置监听viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {override fun onPageScrolled(position: Int,positionOffset: Float,positionOffsetPixels: Int) {indicator.forEachIndexed { index, view ->view.isSelected = index == position}}})}
}
class ViewPager2Adapter(private val context: Context, private val mImgIds: IntArray) :RecyclerView.Adapter<ViewPager2Adapter.MyViewHolder>() {private var inflater: LayoutInflater = LayoutInflater.from(context)override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {return MyViewHolder(inflater.inflate(R.layout.item_image_view, parent, false))}override fun onBindViewHolder(holder: MyViewHolder, position: Int) {holder.imageView.setImageResource(mImgIds[position])}override fun getItemCount(): Int {return mImgIds.size}class MyViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView) {public val imageView: ImageView = itemView as ImageView}
}

ViewPager2+TabLayout+Fragment

class TabActivity : BaseActivity() {private lateinit var tabLayout: TabLayoutprivate lateinit var viewPager2: ViewPager2private val titles = arrayOf("one", "two", "three", "four", "five", "six", "seven", "eight")private val fragmentList = arrayListOf<TextFragment>().apply {titles.forEachIndexed { index, s ->add(TextFragment.newInstance(s))}}companion object {fun start(context: Context) {val intent = Intent(context, TabActivity::class.java).apply {putExtra(KEY_TITLE, "ViewPager2+TabLayout+Fragment")}context.startActivity(intent)}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_tab)initView()// offscreenPageLimit默认不开启预加载// offscreenPageLimit设置为1表示缓存前一页,预加载下一页,包含当前页一共三页viewPager2.offscreenPageLimit = 1viewPager2.adapter = TabAdapter(this, fragmentList)TabLayoutMediator(tabLayout,viewPager2,object : TabLayoutMediator.TabConfigurationStrategy {override fun onConfigureTab(tab: TabLayout.Tab, position: Int) {tab.text = titles[position]}}).attach()}private fun initView() {tabLayout = findViewById(R.id.tabLayout)viewPager2 = findViewById(R.id.viewPager2)}
}
class TabAdapter(fragmentActivity: FragmentActivity,private val fragmentList: ArrayList<TextFragment>
) : FragmentStateAdapter(fragmentActivity) {override fun getItemCount(): Int = fragmentList.sizeoverride fun createFragment(position: Int): Fragment {return fragmentList[position]}
}

代码下载

Android ViewPager2总结相关推荐

  1. Android - ViewPager2

    文章目录 1. 效果 1. 添加ViewPager2控件 2. MainActivity.java中添加ViewPager2 3. 创建ViewPager中的页面 4. 添加ViewPagerAdap ...

  2. Android - ViewPager2 Fragment

    文章目录 1. 效果 2. 添加ViewPager2控件 3. 添加Fragment页面 4. 添加FragmentStateAdapter类的继承类 5. 添加ViewPager2的逻辑 6. 示例 ...

  3. Android ViewPager2 真的香么?

    Google 前段时间出了新品 ViewPager2,据说意在替代旧版 ViewPager,功能更强大使用更方便:真的这么香么,小菜尝试学习一下! 优势 支持 RTL 布局,稍后介绍: 支持垂直方向切 ...

  4. Android viewpager2 + indicator 实现页面滑动

    在build.gradle里面添加依赖 implementation 'com.tbuonomo:dotsindicator:4.2'implementation 'androidx.viewpage ...

  5. Android ViewPager2自定义页面切换动画

    默认切换动画 MainActivity override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstance ...

  6. Android viewpager2实现翻页效果

    为什么要实现翻页效果?减少用户的操作 viewpager2是基于recyclerview实现的,自带懒加载功能 viewpager2是对recyclerview的封装 要实现下面这个效果 viewpa ...

  7. android viewpager2,viewpager2原理和使用

    近期google官网上更新了viewpager2, 支持垂直滚动, 重写之前的viewpager. 1.原理: viewpager2 内部实现原理是使用recycleview加LinearLayout ...

  8. Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)

    可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...

  9. android viewpager2,Android-ViewPager2的使用

    一.ViewPager2的变化 ViewPager2是用来替换ViewPager的,ViewPager2是final修饰的,直接继承ViewGroup,其内部是使用RecyclerView,ViewP ...

最新文章

  1. Java 进行 RSA 加解密时不得不考虑到的那些事儿
  2. HDOJ1016 素数环(DFS)
  3. Remoting系列(二)----建立第一个入门程序
  4. [转载]中国公历算法
  5. 最长公共子串(10分)
  6. java里面的pai_Java - ZhangPai - 博客园
  7. Linux基础—1.Linux系统(CentOS6.7)详细安装过程
  8. 指针 是否相同_【变电小课堂】MF47指针式万用表操作指南
  9. 解决jupyter无法自动打开网页
  10. kvaser在linux中的应用
  11. 性能服务器漫画免费下拉式,热浪漫画_斗破苍穹漫画免费下拉式
  12. RabbitMQ交换机的讲解
  13. 找茬小游戏微信小程序源码自带流量主功能+前端+后端+教程
  14. ems数字货币运营模式,emstoken是什么,emstoken骗局揭秘
  15. GRE词汇乱序版-夹生的词汇1
  16. 如何在微信中(微信公众号页面)给Vue单页应用设置标题
  17. 系统工程--011详细设计 伪码 程序流程图 PAD图 N-S图 判断表和判断树
  18. backports/lzma/_lzmamodule.c:115:18: fatal error: lzma.h: No such file or directory serWarning: Coul
  19. 密码学-password 1
  20. C++使用OCC读取igs文件时路径为中文时,无法读取的问题

热门文章

  1. 【golang】代理模式 proxy using in go
  2. C#中根据情况禁用contextMenuStrip
  3. Cucumber-基于 behave 自动化测试指南 (一)
  4. 取石子游戏系列(1)
  5. mustache模板
  6. GUI 引擎评价指标
  7. 调节e18-d80nk的测量距离_数显调节仪XSC5-ASIC1V1蓝宇
  8. 《Java从入门到放弃》入门篇:hibernate查询——HQL
  9. Linux磁盘分区对superblock的理解
  10. k8s 入门 查看Pods/Nodes