Установить позицию прогрессбара - PullRequest
1 голос
/ 30 июня 2019

Мне нужно, чтобы положение индикатора выполнения зависело от двух значений метки времени в миллисисах, поэтому оно зависит от будущей, прошлой и текущей меток времени.

Например, у меня есть метка времени 08:46:11 30.06.2019 и 10:46:11 30.06.2019.Но текущее время - 09:46:11 30.06.2019, так что теперь прогрессбар должен быть заполнен на 50% и увеличиваться до 100 до 10:46:11 30.06.2019

Я попробовал следующий код, но сейчасЯ понял, что использование CountDownTimer бесполезно, и это не для моей задачи, которая описана выше:

private void progressBar(){
            prBar.setProgress(i);
            mCountDownTimer=new CountDownTimer(ltimestampStop * 1000,ltimestampStart * 1000) {

                @Override
                public void onTick(long millisUntilFinished) {
                    Log.v("Log_tag", "Tick of Progress"+ i+ millisUntilFinished);
                    i++;
                    int Start = ltimestampStart.intValue();
                    int Stop = ltimestampStop.intValue();
                    prBar.setProgress((int)i*100/(Stop/Start));

                }

                @Override
                public void onFinish() {
                    //Do what you want
                    i++;
                    prBar.setProgress(100);
                }
            };
            mCountDownTimer.start();
        }

Так что я должен сделать для создания индикатора прогресса на определенной позиции, которая зависит от будущего времени, прошлого времени и настоящего времени

1 Ответ

0 голосов
/ 30 июня 2019

Вы можете попробовать следующее:

long startTimeInMillis = ...;     // 08:46:11 30.06.2019
long stopTimeInMillis = ...;      // 10:46:11 30.06.2019
long currentTimeInMillis = ...;   // 09:46:11 30.06.2019
long totalTimeInMilis = stopTimeInMillis - startTimeInMillis;

// Standart logic
long remainingTimeInMillis = stopTimeInMillis - currentTimeInMillis;
// But this line assures remaining time is not greater than total time
long remainingTimeInMillis = currentTimeInMillis < startTimeInMillis ?
        totalTimeInMilis : stopTimeInMillis - currentTimeInMillis;

// Update every second
long countDownIntervalInMillis = 1000;
// Alternatively you can adjust interval such that it is called only in integer percent changes
int remainingSteps = (int) (((double) remainingTimeInMillis / totalTimeInMilis) * 100);
long countDownIntervalInMillis = remainingTimeInMillis / remainingSteps;

mCountDownTimer = new CountDownTimer(remainingTimeInMillis, countDownIntervalInMillis) {

    @Override
    public void onTick(long millisUntilFinished) {
        int completedPercent = (int) ((1 - (double) millisUntilFinished / totalTimeInMilis) * 100);
        prBar.setProgress(completedPercent);
    }

    @Override
    public void onFinish() {
        // Do what you want
        prBar.setProgress(100);
    }
};
mCountDownTimer.start();
...