Таймер обратного отсчета с CircularProgressIndicator

Я пытаюсь добавить таймер обратного отсчета с помощью circular progress indicator (из компоненты материального дизайна) в мое приложение, но у меня проблемы с настройкой начального значения 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. Но исходная точка неверна.

Что мне нужно, так это начальный старт, который должен выглядеть так: введите здесь описание изображения

Что я здесь делаю неправильно?


person abdullah celik    schedule 19.12.2020    source источник


Ответы (1)


Ваш прогресс рассчитывается неправильно.

progressIndicator.progress = (millisUntilFinished / 1000).toInt()

Если millisUntilFinished == 59000, вы получите прогресс 59. Вы должны рассчитывать процент здесь вместо этого.

person Andreas Pålsson    schedule 19.12.2020
comment
Итак, разделив на общее значение (60) и умножив на 100? Пример: (59 / 60) * 100. Вы имеете в виду это? - person abdullah celik; 19.12.2020