¿Cómo usar setProgressDrawable () correctamente?

Estoy teniendo problema con la fijación de un nuevo Drawable a mi ProgressBar.

Si utilizo el método onCreate () de setProgressDrawable () funciona muy bien. Pero cuando trato de llamar al mismo método dentro de una devolución de llamada de manejador no funciona y desaparece la barra de progreso.

¿Puede alguien explicar este comportamiento? ¿Como puedó resolver esté problema?

Bumped en este problema yo y me las arreglé para conseguir que funcione 🙂

Utilicé el AsyncTask para manejar las tareas / subprocesos de fondo, pero la idea debería ser la misma que usar Runnable/Handler (aunque AsyncTask se siente más agradable imo).

Así que esto es lo que hice … poner setContentView(R.layout.my_screen); En el método onPostExecute ! (Es decir, en lugar del método onCreate )

Así que el código se parece a esto:

 public class MyScreen extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.my_screen); !!! Don't setContentView here... (see bottom) new MySpecialTask().execute(); } private int somethingThatTakesALongTime() { int result; // blah blah blah return result; } private void updateTheUiWithResult(int result) { // Some code that changes the UI // For exampe: TextView myTextView = (TextView) findViewById(R.id.result_text); myTextView.setText("Result is: " + result); ProgressBar anyProgressBar = (ProgressBar) findViewById(R.id.custom_progressbar); anyProgressBar.setProgressDrawable(res.getDrawable(R.drawable.progressbar_style)); anyProgressBar.setMax(100); anyProgressBar.setProgress(result); } private class MySpecialTask extends AsyncTask<String, Void, Integer> { ProgressDialog mProgressDialog; @Override protected void onPreExecute() { mProgressDialog = ProgressDialog.show(MyScreen.this, "", "Calculating...\nPlease wait...", true); } @Override protected Integer doInBackground(String... strings) { return somethingThatTakesALongTime(); } @Override protected void onPostExecute(Integer result) { mProgressDialog.dismiss(); setContentView(R.layout.my_screen); // setContent view here... then it works... updateTheUiWithResult(result); } } } 

Para ser honesto, por qué usted necesita llamar a setContentView en onPostExecute No tengo idea … pero al hacerlo significa que puede configurar estilos personalizados para sus barras de progreso (y no desaparecen en usted!)

 downloadingBar.setProgress(0); Drawable progressDrawable = getResources().getDrawable(R.drawable.download_progressbar_pause_bg); progressDrawable.setBounds(downloadingBar.getProgressDrawable().getBounds()); downloadingBar.setProgressDrawable(progressDrawable); downloadingBar.setProgress(mCurrentPercent); 
  1. Primero debe restablecer el progreso a cero
  2. Establecer los límites de progreso
  3. Establecer nuevo progreso
  4. Establecer nuevo progreso

Tal vez poner el código en un hilo que no es el hilo principal. Si desea trabajar con la interfaz de usuario, debe hacerlo en el subproceso principal 🙂

También estaba enfrentando el mismo problema pero en mi caso se debe al uso del método Drawable.mutate (). Cuando quité ese método comenzó a trabajar muy bien. También me di cuenta de que este problema existe debajo de api nivel-21 (piruleta).

  • Progressbar WebView como navegador de Chrome
  • Android barra de progreso horizontal?
  • Fondo circular de ProgressBar: Android Xamarin
  • Android: ¿Cómo puedo mostrar la barra de progreso al cargar datos en WebView?
  • Cambiar el color de la barra de progreso en android
  • android circle progressbar
  • Android: muestra texto en el centro de la barra de progreso
  • ¿Cómo cambiar el color en la barra de progreso circular?
  • ProgressBar en la parte inferior de gridview
  • Cómo conseguir la barra de progreso indeterminada más suave usada en la aplicación Android de Gmail
  • Mostrar ProgressBar durante cierto tiempo en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.