2010-05-10 15 views
12

En un selector de color, tengo 3 SeekBars para Hue, Saturation y Value. Llamar a setProgressDrawable en estos SeekBars solo funciona una vez: en la inicialización desde onCreate. Cuando el usuario actualiza Hue SeekBar, quiero llamar a setProgressDrawable para Saturación y Value SeekBars, para mostrar al usuario sus elecciones de color para el nuevo tono.Android ProgressBar.setProgressDrawable solo funciona una vez?

Pero todas las llamadas a setProgressDrawable (después de las iniciales de onCreate) hacen que se seque SeekBar.

¿Cómo puedo actualizar el degradado de fondo de mis SeekBars en función de las entradas del usuario?

Respuesta

1

Hola, tengo las soluciones para esto, primero tienes que configurar el dibujable en ProgressBar llamando a setProgresssDrawable (dibujable) y solo luego establecer el valor y no al revés. Eso funcionará

Para establecer un progreso dibujable:

Usar un archivo XML estirable como éste:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@android:id/background"> 
    <shape> 
     <corners android:radius="5dip" /> 
     <gradient android:startColor="#00CCCC" 
      android:centerColor="#00CCCC" android:centerY="0.75" 
      android:endColor="#00CCCC" android:angle="270" /> 
    </shape> 
</item> 
<item android:id="@android:id/secondaryProgress"> 
    <clip> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient android:startColor="#00CCCC" 
       android:centerColor="#00CCCC" android:centerY="0.75" 
       android:endColor="#00CCCC" android:angle="270" /> 
     </shape> 
    </clip> 
</item> 
<item android:id="@android:id/progress"> 
    <clip> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient android:startColor="#00CCCC" android:centerColor="#00CCCC" 
       android:centerY="0.75" android:endColor="#00CCCC" android:angle="270" /> 
     </shape> 
    </clip> 
</item> 

guardar esto en la carpeta/estirable y utilizarlo en la setProgressDrawable (estirable) función

+0

¿Cómo puedo establecer el color del gradiente de la Disponibles Progreso? – michael

+0

¡He respondido tu pregunta arriba! – Gooner

+1

Lo sentimos, esta solución no resuelve el problema del OP. Ver la respuesta de toneffectory. –

41

Lo que descubrí es que el dibujante no conoce su tamaño cuando se llama a setprogressdrawable. Cuando está configurado inicialmente, sí sabe su tamaño. Esto significa que hay un nuevo conjunto dibujable en la barra de búsqueda, pero el tamaño del dibujable es 0, no verá nada.

La solución es conseguir primero los límites de la dibujable actual, a continuación, la nueva estirable y, finalmente, establecer los límites de nuevo:

Rect bounds = mySeekBar.getProgressDrawable().getBounds(); 
mySeekBar.setProgressDrawable(newSeekBarBackground); 
mySeekBar.getProgressDrawable().setBounds(bounds); 
+0

¡Gracias! Este fue duro. –

+1

Esto fue similar pero ligeramente diferente que el problema que tuve. Ver http://stackoverflow.com/questions/6336939/seekbar-drawable-not-drawn-after-being-reused-by-adapter. Agregando un comentario aquí en caso de que ayude a alguien algún día –

+0

@toneffectory: Impresionante ... Funcionó para mí ... – 66CLSjY

Cuestiones relacionadas