如何在Android的textview中显示动画3点进度一个接一个在每一秒

5kgi1eie  于 2023-01-19  发布在  Android
关注(0)|答案(2)|浏览(272)

这是我的xml代码

<LinearLayout
        android:id="@+id/progress_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_title"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_progrees"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Please wait"
            android:textColor="@color/white"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/tv_dot_progrees"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="..."
            android:textColor="@color/white"
            android:textSize="24sp" />
    </LinearLayout>

这是我的函数,显示在动画进度点一个接一个在文本视图

var defaultDot = "."
            Handler(Looper.getMainLooper()).postDelayed({
                tv_dot_progrees.text =   "."
                defaultDot = if(defaultDot.length == 3){
                    ""
                }else{
                    "$defaultDot."
                }
            }, 1000)

我无法看到进度动画上的一个请帮助我我做错了什么我想看到每个点(。)一个接一个一旦其达到3然后再其开始从一.

ryevplcw

ryevplcw1#

试试这个,正好符合要求

var defaultDot = "."
        val customHandler = Handler(Looper.getMainLooper())
        val runnable: Runnable = object : Runnable {
            override fun run() {
                binding.tvDotProgrees.text = "$defaultDot"

                defaultDot = if (defaultDot.length == 3) {
                    ""
                } else {
                    "$defaultDot."
                }
                customHandler.postDelayed(this, 1000)
            }
        }
        runnable.run()
368yc8dk

368yc8dk2#

您的Handler进程将在1秒后运行一次,然后停止。
如果希望Handler进程重复运行,需要类似下面的代码:

val repeatJob = object : Runnable {
    override fun run() {
        tv_dot_progrees.text = "."
        defaultDot = if (defaultDot.length == 3) {
            ""
        } else {
            "$defaultDot."
        }
        Handler(Looper.getMainLooper()).postDelayed(this, 1000)
    }
}
repeatJob.run()

如果您想在之后停止Handler进程,您可能需要定义您的Handler,然后调用Handler.removeCallbacksAndMessages(null)Handler.removeCallbacks(Runnable)

相关问题