Kotlin+RX实现ViewPager无限轮播
2018-09-10 本文已影响0人
xuezhi123go
要是有什么不妥之处还请各位大佬指正。
参考文章: 超简单,RxJava+ViewPager实现无限轮播广告条
首先在pagerAdapter的getCount()方法中设置count为Int.MAX_VALUE,这样无论怎么滑都不会滑到结尾了。
override fun getCount(): Int {
return Int.MAX_VALUE
}
然后在instantiateItem()方法里设置新的newPosition = position % mData!!.size,使数据的position和我们刚设置的MAX_VALUE的position对应。
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,大功告成。