Kotlin+RX实现ViewPager无限轮播

2018-09-10  本文已影响0人  xuezhi123go
要是有什么不妥之处还请各位大佬指正。

参考文章: 超简单,RxJava+ViewPager实现无限轮播广告条

首先在pagerAdaptergetCount()方法中设置countInt.MAX_VALUE,这样无论怎么滑都不会滑到结尾了。

override fun getCount(): Int {
                return Int.MAX_VALUE
            }

然后在instantiateItem()方法里设置新的newPosition = position % mData!!.size,使数据的position和我们刚设置的MAX_VALUEposition对应。

override fun instantiateItem(container: ViewGroup, position: Int): Any {
                val view = View.inflate(context, R.layout.item_vp_home_head, null)

                var newPosition = position % mData!!.size

                view.tv_homeheadtitle.text = "标题" + newPosition
                container.addView(view)
            
                return view
            }

这样PagerAdapter就设置完了,为了实现左右都能无限滑动,让初始显示的currentItem=1000,这样向左滑1000条才会滑倒第一条的位置,用户就不会发现左边的第一条了。

itemView.id_viewpager.currentItem = 1000

这样无限滑动实现了,下面用RX设置自动轮播。

Observable.interval(3, 3, TimeUnit.SECONDS).bindToLifecycle(itemView)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe { next ->       
                  itemView.id_viewpager.setCurrentItem(itemView.id_viewpager.currentItem+1,true)
                }

这样设置后就能每隔3秒自动向后滑动一页了。
用上面的方法之前要在dependencies()里加上下面的代码。

dependencies {
implementation 'com.trello.rxlifecycle2:rxlifecycle-kotlin:2.2.2'
}

ok,大功告成。


要是有什么不妥之处还请各位大佬指正。
上一篇下一篇

猜你喜欢

热点阅读