美文网首页
ViewPager2

ViewPager2

作者: 杜宁依果 | 来源:发表于2020-11-14 07:54 被阅读0次

一. ViewPager2实现无限轮播

废话不多说直接上代码

  1.初始化viewpger2

      <androidx.viewpager2.widget.ViewPager2
                        android:id="@+id/frag_shouye_vp2"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@color/color_999999"></androidx.viewpager2.widget.ViewPager2>
  1.添加viewpager适配器,viewpager2直接可使用RecyclerView.Adapter
class ShouYeVPagerAdaPter(context: Context):RecyclerView.Adapter<ShouYeVPagerAdaPter.ViewHodler>() {

    private var bannerArr = intArrayOf()
    private var context:Context? = null
    init {
        this.context = context
    }

    fun setData(bannerArr: IntArray){
        this.bannerArr = bannerArr
    }
    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int,
    ): ViewHodler {
        return ViewHodler(
            LayoutInflater.from(parent.context).inflate(
                R.layout.shouye_vp_itme,
                parent,
                false
            )
        )

    }

    override fun onBindViewHolder(holder: ViewHodler, position: Int) {
        if (bannerArr.isNotEmpty()){
            holder.vp_itme_iv.setBackgroundResource(bannerArr[position%bannerArr.size])//此处是无限轮播的关键代码

        }else{
            holder.vp_itme_iv.setBackgroundResource(R.mipmap.meikuang_noe_bgc)
        }
    }
    override fun getItemCount(): Int  = Int.MAX_VALUE//设置最大int值是为了进行无线轮播

    class ViewHodler(itemView: View) : RecyclerView.ViewHolder(itemView) {
      var  vp_itme_iv = itemView.vp_itme_iv
    }


}
3.注册滑动监听
    frag_shouye_vp2.registerOnPageChangeCallback(myOnPageChangeCallback)
注意需要在不需要的时候需要进行反注册

frag_shouye_vp2.unregisterOnPageChangeCallback(myOnPageChangeCallback)
    private var myOnPageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int,
        ) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            this@ShouYeFragment.position = position
            if (bannerArr.isNotEmpty()){
                //获取小圆点的位置
                //偏移量的百分比+偏移量
                leftMagin = (positionOffset * distance + position % bannerArr.size * distance)
                Log.i("TAG", "onPageScrolled: $leftMagin")
                rlParams.leftMargin = leftMagin.toInt()
                dot_iv.layoutParams = rlParams
            }

        }

        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
        }

        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)

            if (state == ViewPager2.SCROLL_STATE_IDLE) {
                if (position == 0) {

                } else {

                }

            } else {
            }
        }


    }

3.创建handler,实现自动轮播
private var handler = object : Handler(Looper.getMainLooper()) {}
在   onResume进行第一次发送
override fun onResume() {
       super.onResume()
       handler.postDelayed(runnable, 5000)
   }
 在ruunable里面使用递归实现自动轮播
   private var runnable: Runnable = object : Runnable {
       override fun run() {
           frag_shouye_vp2.currentItem = ++frag_shouye_vp2.currentItem//给viewpger设置显示
           handler.postDelayed(this, 5000)//递归
       }
   }

``` 持续更新中

相关文章

网友评论

      本文标题:ViewPager2

      本文链接:https://www.haomeiwen.com/subject/gjxbbktx.html