2010-05-10 16 views
12

In un selettore di colori, ho 3 barre di ricerca per tonalità, saturazione e valore. Chiamare setProgressDrawable su questi SeekBars funziona solo una volta - all'inizializzazione da onCreate. Quando l'utente aggiorna Hue SeekBar, voglio chiamare setProgressDrawable per Saturation e Value SeekBars, per mostrare all'utente le loro scelte di colore per la nuova tonalità.Android ProgressBar.setProgressDrawable funziona solo una volta?

Ma tutte le chiamate a setProgressDrawable (dopo le iniziali da onCreate) causano l'oscuramento di SeekBar.

Come posso aggiornare il gradiente di sfondo del mio SeekBars in base all'input dell'utente?

risposta

1

Ehi Ho trovato le soluzioni a questo, devi prima impostare il drawable su ProgressBar chiamando setProgresssDrawable (drawable) e solo allora imposta il valore e non viceversa. Funzionerà.

Per impostare un progresso drawable:

Utilizzare un file xml drawable come questo:

<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> 

salvare questo nella cartella/drawable e utilizzarlo nel setProgressDrawable (drawable) function

+0

Come posso impostare il colore del gradiente dei progressi Drawable? – michael

+0

Ho risposto alla tua domanda qui sopra! – Gooner

+1

Siamo spiacenti, questa soluzione non risolve il problema dell'OP. Vedi la risposta a toneffectory. –

41

Quello che ho scoperto è che il drawable non conosce la sua dimensione quando viene chiamato setprogressdrawable. Quando è inizialmente impostato, non conosce le sue dimensioni. Questo significa che c'è un nuovo set disegnabile sulla barra di ricerca, ma la dimensione del drawable è 0, non vedrai nulla.

La soluzione è quella di ottenere prima i limiti della drawable corrente, quindi impostare il nuovo drawable e, infine, impostare i limiti di nuovo:

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

Grazie! Questo era duro. –

+1

Questo era simile ma leggermente diverso dal problema che ho incontrato. Vedi http://stackoverflow.com/questions/6336939/seekbar-drawable-not-drawn-after-being-reused-by-adapter. Aggiungere un commento qui nel caso in cui aiuti qualcuno un giorno –

+0

@toneffectory: Impressionante ... Ha lavorato per me ... – 66CLSjY

Problemi correlati