Horizontal ProgressBar: Cambiar entre determinado e indeterminado

Estoy tratando de alternar un SeekBar entre los dos modos para mostrar el estado de los medios de streaming.

He establecido que los gráficos correctos muestran al definir el android:indeterminate etiqueta android:indeterminate en XML:

 <SeekBar android:id="@+id/seekBar1" android:indeterminate="false" android:progressDrawable="@android:drawable/progress_horizontal" android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" android:indeterminateBehavior="cycle" android:indeterminateOnly="false" android:progress="33" android:secondaryProgress="66" android:layout_height="wrap_content" android:layout_width="match_parent"></SeekBar> 

ejemplo

El problema es que, al intentar cambiar llamando setIndeterminate(true) , los drawables no parecen cambiar correctamente. En el caso de indeterminado-> determinado, la animación se detiene, y de determinado-> indeterminado, no pasa nada.

¿Qué estoy haciendo mal?

El SeekBar onSizeChanged () inicializa sólo el fondo seleccionado seleccionado, y se llama una vez cuando se inicializa el SeekBar. Así que una solución podría ser:

 public class CorrectedSeekBar extends SeekBar { public CorrectedSeekBar(Context context) { super(context); } public CorrectedSeekBar(Context context, AttributeSet attrs) { super(context, attrs); } public CorrectedSeekBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } protected void onSizeChanged(int w, int h, int oldw, int oldh) { boolean current = isIndeterminate(); setIndeterminate(!current); super.onSizeChanged(w, h, oldw, oldh); setIndeterminate(current); super.onSizeChanged(w, h, oldw, oldh); } } 

Y en el diseño xml use <yourpackage.CorrectedSeekBar ...

Esto no se ve bien, otras soluciones podrían ser posibles, pero creo que este es el principal problema (bug?).

He tenido el mismo problema y lo solucioné llamando a postInvalidate () para forzar la actualización de la vista. Estoy en Android 2.3.4.

 // Configure the SeekBar seekBar.setIndeterminate(true); seekBar.postInvalidate(); 

Bueno, en lugar de establecer el pd a indeterminado sólo cambiar su fondo. Si desea animaciones dibujables, entonces sugiero que mire en el TransitionDrawable aquí: TransitionDrawable . Por lo que el uso de la misma es realmente añadir 2 diferentes drawables y animar su transición. Creo que debería funcionar para su caso. Pero no tengo experiencia haciendo algo como esto en un diálogo de progreso por lo que realmente no puedo decir.

La solución es realmente muy simple, el mismo truco que tienes que usar para iniciar un dibujo animado. Este problema sólo parece afectar a Android 2.3 (quizás también versiones anteriores de Android).

Cuando quiera establecer:

 progressBar.setIndeterminate(true); 

Utilice esta parte del código en su lugar:

 this.progressBar.post(new Runnable() { @Override public void run() { progressBar.setIndeterminate(true); } }); 
  • Android: ¿Cómo obtener sugerencias de búsqueda de forma asíncrona desde la Web?
  • Cómo eliminar el foco de SearchView?
  • Android: no puede encontrar TextView dentro de SearchWidget cuando usa la biblioteca de soporte técnico de Android
  • Formatear texto para sugerencias de búsqueda personalizadas proporcionadas en un cursor de un proveedor de contenido
  • Personalización de Android SeekBar
  • Mejores Prácticas para el Manejo de la Búsqueda
  • Detección de la posición del pulgar en SeekBar antes de la versión 16 de la API
  • ¿Cómo funciona la búsqueda de Google?
  • Cambio de diálogo de búsqueda
  • ¿Por qué es Intent.getAction () nulo de mi actividad de búsqueda?
  • Cómo hacer android buscar barra de ancho completo en api 17 o superior?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.