Android ProgressBar.setProgressDrawable работает только один раз?
В наборе цветов у меня есть 3 SeekBars для оттенков, насыщенности и значения. Вызов setProgressDrawable на этих SeekBars работает только один раз - при инициализации из onCreate. Когда пользователь обновляет Hue SeekBar, я хочу вызвать setProgressDrawable для Saturation и Value SeekBars, чтобы показать пользователю их цветовые решения для нового оттенка.
Но все вызовы setProgressDrawable (после начальных из onCreate
) заставляют SeekBar быть пустым.
Как обновить фоновый градиент моего SeekBars на основе ввода пользователем?
Ответы
Ответ 1
Что я узнал, так это то, что drawable не знает этого размера при вызове setprogressdrawable. Когда он изначально настроен, он знает его размер. Это означает, что в поисковом баттоне есть новый набор с возможностью рисования, но размер drawable равен 0, вы ничего не увидите.
Решение состоит в том, чтобы сначала получить границы текущего drawable, затем установить новый drawable и, наконец, снова установить границы:
Rect bounds = mySeekBar.getProgressDrawable().getBounds();
mySeekBar.setProgressDrawable(newSeekBarBackground);
mySeekBar.getProgressDrawable().setBounds(bounds);
Ответ 2
Привет, у меня есть решения для этого, сначала нужно установить 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)