Android ViewPager2总结
文章目录
- 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总结相关推荐
- Android - ViewPager2
文章目录 1. 效果 1. 添加ViewPager2控件 2. MainActivity.java中添加ViewPager2 3. 创建ViewPager中的页面 4. 添加ViewPagerAdap ...
- Android - ViewPager2 Fragment
文章目录 1. 效果 2. 添加ViewPager2控件 3. 添加Fragment页面 4. 添加FragmentStateAdapter类的继承类 5. 添加ViewPager2的逻辑 6. 示例 ...
- Android ViewPager2 真的香么?
Google 前段时间出了新品 ViewPager2,据说意在替代旧版 ViewPager,功能更强大使用更方便:真的这么香么,小菜尝试学习一下! 优势 支持 RTL 布局,稍后介绍: 支持垂直方向切 ...
- Android viewpager2 + indicator 实现页面滑动
在build.gradle里面添加依赖 implementation 'com.tbuonomo:dotsindicator:4.2'implementation 'androidx.viewpage ...
- Android ViewPager2自定义页面切换动画
默认切换动画 MainActivity override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstance ...
- Android viewpager2实现翻页效果
为什么要实现翻页效果?减少用户的操作 viewpager2是基于recyclerview实现的,自带懒加载功能 viewpager2是对recyclerview的封装 要实现下面这个效果 viewpa ...
- android viewpager2,viewpager2原理和使用
近期google官网上更新了viewpager2, 支持垂直滚动, 重写之前的viewpager. 1.原理: viewpager2 内部实现原理是使用recycleview加LinearLayout ...
- Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)
可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...
- android viewpager2,Android-ViewPager2的使用
一.ViewPager2的变化 ViewPager2是用来替换ViewPager的,ViewPager2是final修饰的,直接继承ViewGroup,其内部是使用RecyclerView,ViewP ...
最新文章
- Java 进行 RSA 加解密时不得不考虑到的那些事儿
- HDOJ1016 素数环(DFS)
- Remoting系列(二)----建立第一个入门程序
- [转载]中国公历算法
- 最长公共子串(10分)
- java里面的pai_Java - ZhangPai - 博客园
- Linux基础—1.Linux系统(CentOS6.7)详细安装过程
- 指针 是否相同_【变电小课堂】MF47指针式万用表操作指南
- 解决jupyter无法自动打开网页
- kvaser在linux中的应用
- 性能服务器漫画免费下拉式,热浪漫画_斗破苍穹漫画免费下拉式
- RabbitMQ交换机的讲解
- 找茬小游戏微信小程序源码自带流量主功能+前端+后端+教程
- ems数字货币运营模式,emstoken是什么,emstoken骗局揭秘
- GRE词汇乱序版-夹生的词汇1
- 如何在微信中(微信公众号页面)给Vue单页应用设置标题
- 系统工程--011详细设计 伪码 程序流程图 PAD图 N-S图 判断表和判断树
- backports/lzma/_lzmamodule.c:115:18: fatal error: lzma.h: No such file or directory serWarning: Coul
- 密码学-password 1
- C++使用OCC读取igs文件时路径为中文时,无法读取的问题