Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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)