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:
- Android - colapse searchview after submit
- Cambiar progreso / La escala de búsqueda no es lineal (por ejemplo, logarítmica)
- Android: onSeekCompleteListener con VideoView
- Android SearchView no funciona
- Implementación de búsqueda personalizada con SearchView
<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>
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?
- SearchWidget no llama a onSearchRequested ()
- La vista de búsqueda no funciona desde la aplicación compat
- Obtenga los datos de contacto de la identificación de contacto en Android
- Cómo hacer que SeekBar ocupe todo el ancho de los padres
- Cómo llamar a onSearchRequested al presionar lupa
- Creación de un filtro de texto (como búsqueda rápida) para un Spinner en Android
- ¿Cómo agregar la opción de búsqueda en la aplicación Android?
- Android: menuItem.expandActionView () en el nivel API <14
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); } });
- Agregue un onClickListener en Default GroupIndicator en ExpandableListView
- Cambiar el icono y el color del título cuando se selecciona en la biblioteca de diseño de Android TabLayout