Android ProgressBar.setProgressDrawable работает только один раз?

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

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

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

Solutions Collecting From Web of "Android ProgressBar.setProgressDrawable работает только один раз?"

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

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

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

Эй, у меня есть решения для этого, сначала нужно установить 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> 

Сохраните его в своей папке / drawable и используйте его в функции setProgressDrawable (drawable)