启言:添加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)