原理是使用定时器定时让Scrollview每一段时间滚动一段距离,产生平滑滚动的效果。通过触摸和滚动监听实现手动定位内容展示位置,直到滑动到最底部。布局可根据个人需求更改。 实现效果:
布局文件主要控件
<ScrollView
android:id="@+id/scrollView"
android:layout_width="200dp"
android:layout_height="100dp">
<TextView
android:id="@+id/tvMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="11111112231234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊31234564879fdafs逻辑了复读机啊饭啊福IEIowa 福娃房间安静放假啦发了阿里"
android:textSize="18sp"/>
</ScrollView>
主要功能方法
fun setSvScroll(){
var currentY = 0
var scrollHeight = 1
var preTime = 5L
var observable:Disposable? = null
var canAutoScorll = true
scrollView?.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
currentY = scrollY
}
observable = Observable.interval(preTime, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Consumer<Long> {
override fun accept(t: Long) {
if (canAutoScorll){
currentY+=scrollHeight
scrollView?.scrollTo(0, currentY)
}
}
})
scrollView?.setOnTouchListener { v, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
canAutoScorll = false
}
MotionEvent.ACTION_UP -> {
canAutoScorll = true
}
else -> {
}
}
false
}
}
|