CircularProgressIndicator倒计时初始进度显示异常问题求助
解决CircularProgressIndicator初始圆圈不完整的问题
嗨,我懂你遇到的困扰啦——你的CircularProgressIndicator一开始没显示完整圆圈,核心原因是你没给它设置和倒计时时长匹配的最大值(max)。
Material Design的CircularProgressIndicator默认max值是100,而你的倒计时是从60秒开始递减到0,初始进度设为60的话,它只会渲染60%的圆圈,这就是初始状态不完整的根源。
具体修复步骤:
第一步:给ProgressIndicator设置正确的max值
你可以直接在XML布局里添加app:max="60",或者在代码里动态设置progressIndicator.max = 60,让最大值和你的倒计时总时长(60秒)保持一致。第二步:初始化进度为60
在启动倒计时之前,手动把进度设置为60,确保一开始圆圈就是满的状态。第三步:确认倒计时逻辑的正确性
你onTick方法里用millisUntilFinished / 1000计算进度的逻辑是对的,随着时间递减,进度会从60降到0,圆圈也会随之逐步收缩,完全符合你的需求。
修改后的代码示例:
XML布局(添加max属性):
<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:max="60" <!-- 新增:设置最大值为60 --> 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>
Kotlin代码(初始化进度):
// 初始化ProgressIndicator的最大值和初始进度 binding.progressIndicator.apply { max = 60 progress = 60 } // 启动倒计时 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() { // 60秒结束后停止录制 stopRecording() } }.start() // 别忘了调用start()启动倒计时哦
这样调整后,你的CircularProgressIndicator初始状态就会显示完整的圆圈,然后随着倒计时逐步递减,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者abdullah celik
相关产品推荐
相关产品推荐

