【问题标题】:How to show animated 3 dot progress one by one in each second in textview in Android如何在Android的textview中每秒一个一个地显示动画3点进度
【发布时间】:2023-01-18 15:54:33
【问题描述】:

这是我的 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>

这是我在 textview 中一个一个地显示动画进度点的功能

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

我看不到进度动画,请帮助我我做错了什么我想一个接一个地看到每个点 (.) 一旦达到 3 然后再次从 1 开始。

【问题讨论】:

    标签: android


    【解决方案1】:

    试试这个。直接符合要求

            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()
    

    【讨论】:

      【解决方案2】:

      您的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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多