2010-05-10 7 views
12

In einem Farbwähler habe ich 3 SeekBars für Farbton, Sättigung und Wert. Der Aufruf von setProgressDrawable auf diesen SeekBars funktioniert nur einmal - bei der Initialisierung von onCreate. Wenn der Benutzer die Hue SeekBar aktualisiert, möchte ich setProgressDrawable für die Sättigungs- und Wert-SeekBars aufrufen, um dem Benutzer seine Farbauswahl für den neuen Farbton anzuzeigen.Android ProgressBar.setProgressDrawable funktioniert nur einmal?

Aber alle Aufrufe von setProgressDrawable (nach den ersten von onCreate) verursachen, dass die SeekBar ausgeblendet wird.

Wie kann ich den Hintergrundgradienten meiner SeekBars basierend auf Benutzereingaben aktualisieren?

Antwort

1

Hey, ich habe die Lösungen zu diesem, müssen Sie zuerst das Zeichen auf die ProgressBar setzen, indem Sie setProgressesDrawable aufrufen (Zeichen) und erst dann den Wert und nicht umgekehrt. Das wird funktionieren.

Um einen Fortschritt ziehbar gesetzt:

Verwenden Sie eine ziehbar XML-Datei wie diese:

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

diese speichern in Ihren/ziehbar Ordner und verwenden Sie es in der setProgressDrawable (ziehbar) Funktion

+0

Wie kann ich die Farbe des Gradienten des Fortschritts Drawable eingestellt? – michael

+0

Ich habe Ihre Frage oben beantwortet! – Gooner

+1

Entschuldigung, diese Lösung löst das Problem des OP nicht. Siehe toneffective Antwort. –

41

Was ich herausgefunden habe, ist, dass das Zeichen nicht seine Größe kennt, wenn setprogreddrawable aufgerufen wird. Wenn es anfänglich eingerichtet ist, weiß es seine Größe. Das bedeutet, dass die Suchleiste eine neue Zeichenmenge enthält, aber die Größe der Zeichen ist 0, Sie werden nichts sehen.

Die Lösung besteht darin, zunächst die Grenzen des aktuellen ziehbar zu bekommen, dann setzen die neue ziehbar und schließlich die Grenzen wieder eingestellt:

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

Danke! Dieser war hart. –

+1

Das war ähnlich, aber etwas anders als das Problem, das ich stieß. Siehe http://stackoverflow.com/questions/6336939/seekbar-drawable-not-drawn-after-being-reused-by-adapter. Hinzufügen eines Kommentars hier für den Fall, dass es jemandem irgendwann hilft –

+0

@toneffectory: Ehrfürchtig ... Arbeitete für mich ... – 66CLSjY