El único inteligente Boy:
Tengo el siguiente código me gustaría utilizar para incrementar mi barra de progreso lentamente durante 20 segundos
public void progressAnimator(){
final long period = 1000;
timer=new Timer();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//this repeats every 100 ms
if (counter<100){
runOnUiThread(new Runnable() {
@Override
public void run() {
loaderLabel.setText(String.valueOf(counter)+"%");
}
});
mProgress.setProgress(counter);
counter++;
}
else{
//closing the timer
timer.cancel();
Intent intent =new Intent(SplashActivity.this,MainActivity.class);
startActivity(intent);
// close this activity
finish();
}
}
}, period);
}
Mi problema es que esto sólo termina indicando el 0% en el loaderLabel y luego se congela sin hacer nada. Había probado a principios de este código, pero sólo parpadea el 100% en el loaderLabel y llena la barra de progreso y luego avanza a la siguiente ventana.
public void progressAnimator(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
for( counter =1; counter<=100; counter ++) {
System.out.println(counter);
mProgress.setProgress(counter);
loaderLabel.setText(getResources().getString(R.string.loading) + " " + counter + " " + getResources().getString(R.string.percentSymbol));
if (counter == 100) {
Toast.makeText(SplashActivity.this, R.string.welcome, Toast.LENGTH_LONG).show();
Intent loadMain = new Intent(SplashActivity.this, MainActivity.class);
startActivity(loadMain);
finish();
}
}
}
}, 100);
}
Si aumento el retraso de 20.000 a continuación, se congela a cero, ¿Qué podría estar haciendo mal?
Otema:
En base a la respuesta dada por Kumar Harsh, yo sugeriría que hacer lo siguiente
public void progressAnimator(){
new CountDownTimer(total_duration, duration_of_one_step) {
public void onTick(long millisUntilFinished) {
// code to be executed on every iteration
loaderLabel.setText(MessageFormat.format("{0} {1} {2}", getResources().getString(R.string.loading), ((total_duration - millisUntilFinished) / 1000) * 5, getResources().getString(R.string.percentSymbol)));
mProgress.setProgress((int) ((total_duration - millisUntilFinished) / 1000)*5);
}
public void onFinish() {
//code to be executed on completing the timer
Toast.makeText(SplashActivity.this, R.string.welcome, Toast.LENGTH_LONG).show();
Intent loadMain = new Intent(SplashActivity.this, MainActivity.class);
startActivity(loadMain);
finish();
}
}.start();
}
Esto debería resolver su problema nota que multiplicar por 5 para conseguir el progreso a 100 de lo contrario, se detendrá en 20