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); } }); 
  • Evite que la actividad se recargue al hacer clic en SearchView
  • Cursor de vista de búsqueda de android no visible como el mismo color de la barra de herramientas
  • En Android cómo cambiar el color de una letra / carácter en particular que se está buscando dentro de la lista
  • Mejores Prácticas para el Manejo de la Búsqueda
  • SeekTo en VideoView
  • Android SearchView.onQueryTextSubmit (consulta de cadena)
  • Android - Implementación del filtro de búsqueda en un RecyclerView
  • Cómo buscar archivos en el teléfono sdcard o donde
  • La función VideoView seekto () es extremadamente incoherente
  • EditText necesita hacer clic dos veces para abrir el cuadro de diálogo de búsqueda
  • Palabra árabe Buscando en el archivo de texto en árabe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.