带有 CircularProgressIndicator 的倒数计时器
CountDown Timer with CircularProgressIndicator
我尝试将带有 circular progress indicator
(来自 material design components)的倒数计时器添加到我的应用程序中,但我在设置 circular progress indicator
的初始值时遇到问题。
以下是我编写的代码的相关部分:
countDownTimer = object : CountDownTimer(60000, 1000) {
override fun onTick(millisUntilFinished: Long) {
binding.apply {
countDownTimer.text = (millisUntilFinished / 1000).toString()
progressIndicator.progress = (millisUntilFinished / 1000).toInt()
}
}
override fun onFinish() {
// if 60 secs are finished, then we stop the record
stopRecording()
}
}
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center">
<TextView
android:id="@+id/count_down_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textSize="20sp"
android:textStyle="bold"
android:background="@color/black"
android:textColor="@color/white"
tools:text="60"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/progress_indicator"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:indicatorColor="@color/navajowhite"
app:trackCornerRadius="10dp"
app:indicatorSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/count_down_timer"
android:layout_margin="10dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
我让计数器从 60 秒变为 0。但我认为我的循环进度指示器的进度值是错误的。因为它的初始启动看起来像这样(我创建了一个草图来向您展示计数器启动时循环进度指示器的初始状态):
如您所见,圆圈并不完整。您看不到的是 circular progress indicator
的“轨道”从此递减,直到达到 0。因此,circular progress indicator
的递减以某种方式起作用。但是起点错了
我想要的是一个初步的开始,应该是这样的:
我这里做错了什么?
您的进度计算不正确。
progressIndicator.progress = (millisUntilFinished / 1000).toInt()
如果millisUntilFinished == 59000
,你最终会取得59
的进步。你应该在这里计算一个百分比而不是这个。
我尝试将带有 circular progress indicator
(来自 material design components)的倒数计时器添加到我的应用程序中,但我在设置 circular progress indicator
的初始值时遇到问题。
以下是我编写的代码的相关部分:
countDownTimer = object : CountDownTimer(60000, 1000) {
override fun onTick(millisUntilFinished: Long) {
binding.apply {
countDownTimer.text = (millisUntilFinished / 1000).toString()
progressIndicator.progress = (millisUntilFinished / 1000).toInt()
}
}
override fun onFinish() {
// if 60 secs are finished, then we stop the record
stopRecording()
}
}
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center">
<TextView
android:id="@+id/count_down_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textSize="20sp"
android:textStyle="bold"
android:background="@color/black"
android:textColor="@color/white"
tools:text="60"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/progress_indicator"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:indicatorColor="@color/navajowhite"
app:trackCornerRadius="10dp"
app:indicatorSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/count_down_timer"
android:layout_margin="10dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
我让计数器从 60 秒变为 0。但我认为我的循环进度指示器的进度值是错误的。因为它的初始启动看起来像这样(我创建了一个草图来向您展示计数器启动时循环进度指示器的初始状态):
如您所见,圆圈并不完整。您看不到的是 circular progress indicator
的“轨道”从此递减,直到达到 0。因此,circular progress indicator
的递减以某种方式起作用。但是起点错了
我想要的是一个初步的开始,应该是这样的:
我这里做错了什么?
您的进度计算不正确。
progressIndicator.progress = (millisUntilFinished / 1000).toInt()
如果millisUntilFinished == 59000
,你最终会取得59
的进步。你应该在这里计算一个百分比而不是这个。