Как сделать так, чтобы горизонтальный индикатор выполнения зависел от секунд в Android?

Я хочу знать, как заставить горизонтальный индикатор выполнения зависеть от секунд. Например, какой код я должен написать, чтобы индикатор выполнения начинался с 0% в 0 секунд и достигал 100% через 60 секунд?

Подводя итог, я хочу сделать горизонтальный индикатор выполнения, который зависит только от секунд и больше ни от чего.


person Ricardo    schedule 16.06.2011    source источник


Ответы (3)


bar = (ProgressBar) findViewById(R.id.progress);
    bar.setProgress(total);
    int oneMin= 1 * 60 * 1000; // 1 minute in milli seconds

    /** CountDownTimer starts with 1 minutes and every onTick is 1 second */
    cdt = new CountDownTimer(oneMin, 1000) { 

        public void onTick(long millisUntilFinished) {

            total = (int) ((timePassed/ 60) * 100);
            bar.setProgress(total);
        }

        public void onFinish() {
             // DO something when 1 minute is up
        }
    }.start();

я отредактировал код. увидеть это сейчас. так как это работает. сначала вы устанавливаете общее количество на индикаторе выполнения, которое в вашем случае будет равно 60. затем вам нужно рассчитать процент времени, прошедшего с начала, и которое вы получаете с помощью timePassed/60 * 100 и приведения его к int. поэтому на каждом тике вы увеличиваете прогресс на 1/100 от общего размера. Надеюсь, это прояснит ситуацию.

person DArkO    schedule 16.06.2011
comment
что такое переменная timePassed? - person Sundeep; 14.07.2014

Я предполагаю, что у вас есть код, который уже считает до 60. Исходя из этого:

int time; // 0-60 seconds
ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar);
bar.setProgress((time / 60.0) * 100);
person Tanner Perrien    schedule 16.06.2011

Этот ответ изменен из приведенного выше ответа.

    progressBar = (ProgressBar) findViewById(R.id.progressbar);

    // timer for seekbar
        final int oneMin = 1 * 60 * 1000; // 1 minute in milli seconds

        /** CountDownTimer starts with 1 minutes and every onTick is 1 second */
        new CountDownTimer(oneMin, 1000) {
            public void onTick(long millisUntilFinished) {

                //forward progress
                long finishedSeconds = oneMin - millisUntilFinished;
                int total = (int) (((float)finishedSeconds / (float)oneMin) * 100.0);
                progressBar.setProgress(total);

//                //backward progress
//                int total = (int) (((float) millisUntilFinished / (float) oneMin) * 100.0);
//                progressBar.setProgress(total);

            }

            public void onFinish() {
                // DO something when 1 minute is up
            }
        }.start();
person Thirumalvalavan    schedule 08.05.2018