Android ProgressBar.setProgressDrawable работает только один раз? - PullRequest
12 голосов
/ 10 мая 2010

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

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

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

Ответы [ 2 ]

43 голосов
/ 13 января 2011

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

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

Rect bounds = mySeekBar.getProgressDrawable().getBounds();
mySeekBar.setProgressDrawable(newSeekBarBackground);
mySeekBar.getProgressDrawable().setBounds(bounds);
1 голос
/ 10 июня 2010

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

...