一開始網(wǎng)上找方案候址,找到兩種:
- 協(xié)程打印
suspend fun TextView.print1(text: String, finish:()->Unit) {
repeat(t.length) {
delay(30)
this@print1.text = t.take(it + 1)
}
}
這種方案,在增量文本更新的情況下种柑,刷新 item岗仑,字體打印會瘋狂的跳閃,把recyclerview的刷新動畫屏蔽了聚请,要不然一起閃荠雕。。驶赏。
- 使用 RxJava方案
var disposable: Disposable? = null
fun TextView.print2(text: String) {
try {
disposable = Flowable.interval(200, TimeUnit.MICROSECONDS)
.take(text.length.toLong())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
if (it == text.length.toLong() - 1) {
stop()
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
fun stop() {
if (disposable != null && !disposable!!.isDisposed) {
disposable!!.dispose()
}
}
這種方式炸卑,在增量文本更新的情況下,直接閃退煤傍,因為會創(chuàng)建多個 disposable
后面盖文,我自己對這塊想解決方案,我嘗試著下面這種方式
var index = 0
suspend fun TextView.print2(text: String, finish:()->Unit) {
while (index < text.length) {
delay(30)
this.text = text.take(index + 1)
index += 1
}
if (text.endsWith("(end)")) {
LogUtils.d("======= 結束打印 蚯姆。五续。洒敏。。疙驾。凶伙。")
index = 0
finish()
}
}
這種方案,在有幾十個數(shù)據(jù)不斷刷新 item 的情況下它碎,不會出現(xiàn)跳閃镊靴、閃退的問題,打印也很流暢
被這個刷新數(shù)據(jù)链韭,打印的效果折騰了好幾天偏竟,算是解決了,記錄一下