0

My app starts with an activity containing progress bar. This activity shifts to another activity after 5 seconds automatically. I want to use a smooth progress bar for 5 seconds. I tried this code:

 progressBar = (ProgressBar) findViewById(R.id.prog_bar);   
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 500);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 1000);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 1500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 2000);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 2500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 3000);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 3500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 4000);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 4500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 5000);
    progressBar = (ProgressBar) findViewById(R.id.prog_bar);    
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 500);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 1000);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 1500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 2000);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 2500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 3000);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 3500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 4000);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 4500);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(progressBarStatus);
            progressBarStatus += 10;        
        }
    }, 5000);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            final Intent mainIntent = new Intent(MainPage.this, DashboardActivity.class);
            MainPage.this.startActivity(mainIntent);
            MainPage.this.finish();

        }
    }, 4500);

}

}

I didn't got other way to do so.I need more efficient way and smooth progress bar for this....

Rishi Arora
  • 3
  • 1
  • 5

2 Answers2

0

create one Runnable. r and call handler.postDelayed(r, 500) in its run() method, make sure it is called conditionally so it doesnt loop forever

pskink
  • 23,874
  • 6
  • 66
  • 77
0

Try this

 new AsyncTask<Void, Integer, Void>(){

                @Override
                protected Void doInBackground(Void... params) {
                    int progressStatus = 0;
                    while (progressStatus < 5000) {
                        progressStatus++;
                        publishProgress(progressStatus);
                        try {
                            Thread.sleep(1);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    return null;  
                }

                @Override
                protected void onProgressUpdate(Integer... values) {
                    progressBar.setProgress(values[0]);

                }
            }.execute();
earsonheart
  • 1,042
  • 2
  • 12
  • 25