
S81018-19212752.gif
我是用recycleView實(shí)現(xiàn)的,每隔30毫秒調(diào)用一次smoothScrollBy(x,y)方法就可以了。
private fun startScroll() {
Observable.interval(30, TimeUnit.MILLISECONDS)
.takeUntil { stopScoll }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
rvMarquee.smoothScrollBy(15, 0)
}
}
因?yàn)槲疫@個(gè)頁(yè)面每次onResume的時(shí)候都要刷新數(shù)據(jù),所以在請(qǐng)求數(shù)據(jù)成功后調(diào)用startScroll(),并將stopScroll置為false。然后在onPause()里將stopScroll置為true就可以了。因?yàn)榕荞R燈是無(wú)限跑的,但數(shù)據(jù)是不是很多,所以我直接將數(shù)據(jù)復(fù)制了1000份,這樣跑馬燈在短時(shí)間內(nèi)就不會(huì)停止了。
override fun onGetTaskCenterSuccess(taskcenter: TaskCenter) {
val marqueeRecords = taskcenter.marqueeRecords
val mutableList = mutableListOf<Marquee>()
if (!marqueeRecords!!.isEmpty()) {
(0..1000).forEach {
mutableList.addAll(marqueeList)
}
}
if (marqueeAdapter.data == null)
marqueeAdapter.setNewData(mutableList)
else
marqueeAdapter.replaceData(mutableList)
stopScoll = false
startScroll()
}
override fun onPause() {
super.onPause()
stopScoll = true
}