Android-打字机效果

一开始网上找方案,找到两种:

  1. 协程打印
suspend fun TextView.print1(text: String, finish:()->Unit) {
        repeat(t.length) {
            delay(30)
            this@print1.text = t.take(it + 1)
        }
}

这种方案,在增量文本更新的情况下,刷新 item,字体打印会疯狂的跳闪,把recyclerview的刷新动画屏蔽了,要不然一起闪。。。

  1. 使用 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()
        }
 }

这种方式,在增量文本更新的情况下,直接闪退,因为会创建多个 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()
        }
}

这种方案,在有几十个数据不断刷新 item 的情况下,不会出现跳闪、闪退的问题,打印也很流畅

被这个刷新数据,打印的效果折腾了好几天,算是解决了,记录一下

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容