启言:添加ViewPager2依赖
implementation "androidx.viewpager2:viewpager2:1.0.0"
一、ViewPager2基础使用,实现左右滑动
1.xml布局文件
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2. ViewPager2的适配器Adapter
class MyViewPager2Adapter : RecyclerView.Adapter<MyViewPager2Adapter.PagerViewHolder>() {
private var mList: List<Int> = ArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PagerViewHolder {
val itemView =
LayoutInflater.from(parent.context).inflate(R.layout.item_page, parent, false)
return PagerViewHolder(itemView)
}
fun setList(mList: List<Int>) {
this.mList = mList
}
override fun getItemCount(): Int {
return mList.size
}
override fun onBindViewHolder(holder: PagerViewHolder, position: Int) {
holder.bindData(mList[position])
}
// ViewHolder需要继承RecycleView.ViewHolder
class PagerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val mImageView: ImageView = itemView.findViewById(R.id.item_imgView)
fun bindData(item: Int) {
mImageView.setImageResource(item)
}
}
}
3.在Activity中为ViewPager2设置Adapter
class ViewPager2BaseActivity : AppCompatActivity() {
lateinit var viewPagerAdapter: MyViewPager2Adapter
companion object {
fun startViewPager2BaseActivity(context: Context) {
context.startActivity(Intent(context, ViewPager2BaseActivity::class.java))
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_viewpager2_base)
initDate()
initView()
}
fun initView() {
viewPagerAdapter = MyViewPager2Adapter()
viewPager2.adapter = viewPagerAdapter
}
/**
* 添加数据数据
* */
var pagerList: MutableList<Int> = mutableListOf()
fun initDate() {
pagerList.add(R.mipmap.nine)
pagerList.add(R.mipmap.two)
pagerList.add(R.mipmap.three)
pagerList.add(R.mipmap.four)
pagerList.add(R.mipmap.five)
}
}
4.activity中调佣
class ViewPager2BaseActivity : AppCompatActivity() {
lateinit var viewPagerAdapter: MyViewPager2Adapter
companion object {
fun startViewPager2BaseActivity(context: Context) {
context.startActivity(Intent(context, ViewPager2BaseActivity::class.java))
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_viewpager2_base)
initDate()
initView()
}
fun initView() {
viewPagerAdapter = MyViewPager2Adapter()
viewPagerAdapter.setList(pagerList)
viewPager2.adapter = viewPagerAdapter
}
/**
* 添加数据数据
* */
var pagerList: MutableList<Int> = mutableListOf()
fun initDate() {
pagerList.add(R.mipmap.nine)
pagerList.add(R.mipmap.two)
pagerList.add(R.mipmap.three)
pagerList.add(R.mipmap.four)
pagerList.add(R.mipmap.five)
}
}
二、ViewPager2基础使用,实现上下滑动
接下来我们通过一行代码为其设置竖直滑动 ,竖直滑动用ViewPager是很难实现的,而通过ViewPager2只需要设置一个参数即可。
viewPager2.orientation = ViewPager2.ORIENTATION_VERTICAL
三、页面滑动事件监听
addPageChangeListener被registerOnPageChangeCallback。我们知道ViewPager的addPageChangeListener接收的是一个OnPageChangeListener的接口,
而这个接口中有三个方法,当想要监听页面变化时需要重写这三个方法。而ViewPager2的registerOnPageChangeCallback方法接收的是一个叫OnPageChangeCallback的抽象类,
因此我们可以选择性的重写需要的方法即可。
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
Toast.makeText(
this@ViewPager2BaseActivity,
"滑动到当前页面 = " + (position + 1),
Toast.LENGTH_SHORT
).show()
}
})
四、 setUserInputEnabled
我们知道,在使用ViewPager的时候想要禁止用户滑动需要重写ViewPager的onInterceptTouchEvent。主要用的是事件分发机制。而ViewPager2被声明为了final,
我们无法再去继承ViewPager2。那么我们应该怎么禁止ViewPager2的滑动呢?其实在ViewPager2中已经为我们提供了这个功能,只需要通过setUserInputEnabled即可实现。
默认是true:可滑动 。false:禁止滑动
viewPager2.isUserInputEnabled = false
五、ViewPager2与Fragment
ViewPager2中新增的FragmentStateAdapter 替代了ViewPager的FragmentStatePagerAdapter。那么来我们就用ViewPager2来实现一个Activity中嵌套Fragment的实例。
1.布局同上
2.实现FragmentStateAdapter
class FragmentAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {
var fragments: MutableList<Fragment> = mutableListOf()
init {
fragments.add(HomeFragment.instance)
fragments.add(FindFragment.instance)
fragments.add(MineFragment.instance)
}
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments.get(position)
}
}
六、其他一些实用方法
1.设置页面间距
viewPager2.setPageTransformer(MarginPageTransformer(10))
2.设置展示某个页面 index 从0开始 ,不能超过总的页面数值
viewPager2.setCurrentItem(index , false)
3.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119185.html