Как сделать индикатор выполнения обратного отсчета непрерывно вниз? - PullRequest
0 голосов
/ 04 октября 2018

Я использую индикатор выполнения обратного отсчета в Android.Я хочу, чтобы он обновлялся с новым временем без остановки.Теперь он работает со мной, но он останавливается на короткое время, затем переходите к определенной части процесса. Я не хочу, чтобы он всегда уменьшался без остановки.

Это мой код xml:

<ProgressBar
    android:id="@+id/timerProgressbar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:layout_below="@id/appBar"
    android:layout_marginTop="-2dp"
    android:layout_marginLeft="-1dp"
    android:layout_marginRight="-1dp"
    android:max="20"
    android:rotation="180"
    android:progress="20" />

и это код Java:

timer = new CountDownTimer(21000, 1) {

            public void onTick(long millisUntilFinished) {
                index++;
                timerProgressBar.setProgress((int)millisUntilFinished/1000);
            }

            public void onFinish() {
                index++;
                timerProgressBar.setProgress(0);
                navigate();
            }

        };

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы не должны выполнять занятый цикл, как вы делаете.Приложение может заблокироваться.Вы должны позволить остальной системе продолжать выполнять свою работу.Кроме того, самый быстрый, который может отслеживать человеческий глаз, составляет 30 миллисекунд или около того.Приведенный ниже таймер считает миллисекунды до 10. Вы можете установить максимальное значение счета, изменив if (mcount == yourvalue).

long seconds=0;
long millis=0;
int mCount=0;
Timer timer;

//timer textview
timeflg = (TextView)findViewById(R.id.timerflg);

timer = new Timer();
       timer.scheduleAtFixedRate(new TimerTask() {
       @Override
       public void run() {
       // TODO Auto-generated method stub
                timerMethod();
       }
}, 1,100);

//method
private void timerMethod(){
   this.runOnUiThread(generate);
}
private Runnable generate= new Runnable() {
     @Override
     public void run() {
         timeflg.setText("TIME "+ seconds + ":" + mCount);
         mCount++;
         if(mCount==10){
            mCount=0;
            second++;
         }
     }
};
0 голосов
/ 04 октября 2018

Вы можете сделать это так.Отображение 30-секундного обратного отсчета:

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
            index++;
            timerProgressBar.setProgress((int)millisUntilFinished/1000);
     }

     public void onFinish() {
          index++;
          timerProgressBar.setProgress(0);
          navigate();
     }
  }.start();
...