2010-05-10 2 views
12

В наборе цветов у меня есть 3 SeekBars для оттенка, насыщенности и значения. Вызов setProgressDrawable на этих SeekBars работает только один раз - при инициализации из onCreate. Когда пользователь обновляет Hue SeekBar, я хочу вызвать setProgressDrawable для Saturation и Value SeekBars, чтобы показать пользователю их цветовые решения для нового оттенка.Android ProgressBar.setProgressDrawable работает только один раз?

Но все вызовы setProgressDrawable (после начальных из onCreate) заставляют SeekBar быть заглушены.

Как обновить фоновый градиент моего SeekBars на основе ввода пользователем?

ответ

1

Привет, у меня есть решения для этого, сначала вы должны установить drawable на ProgressBar, вызвав setProgresssDrawable (drawable) и только затем установите значение, а не наоборот. Это сработает.

Чтобы установить прогресс вытяжки:

Используйте вытяжку XML-файл, как это:

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

сохранить это в вашу/вытяжке папку и использовать его в setProgressDrawable (вытяжка) function

+0

Как я могу установить цвет градиента Прогресс Drawable? – michael

+0

Я ответил на ваш вопрос выше! – Gooner

+1

Извините, это решение не разрешает проблему OP. См. Подробный ответ. –

41

Что я узнал, так это то, что выталкиваемый не знает, что его размер при вызове setprogressdrawable. Когда он изначально настроен, он знает, что это размер. Это означает, что в поисковом баттоне установлен новый набор, но размер drawable равен 0, вы ничего не увидите.

Решения сначала получить границы текущего Drawable, а затем установить новую вытяжку и, наконец, установить границы снова:

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

Спасибо! Это было тяжело. –

+1

Это было похоже, но немного отличается от проблемы, с которой я столкнулся. См. Http://stackoverflow.com/questions/6336939/seekbar-drawable-not-drawn-after-being-reused-by-adapter. Добавление комментария здесь, в случае, если кому-то это помогает –

+0

@toneffectory: Awesome ... Работал для меня ... – 66CLSjY

Смежные вопросы