Android ProgressBar: как программно установить вторичный цвет - PullRequest
8 голосов
/ 04 июня 2011

Мне нужно программно установить цвет дополнительного индикатора выполнения .

Я вижу только метод

ProgressBar.setProgressDrawable(drawable)

для установки основного цвета, но нет способа установить вторичный цвет.

Как я могу это сделать?

Ответы [ 4 ]

4 голосов
/ 28 декабря 2011

ProgressBar.getProgressDrawable() возвращает LayerDrawable, в котором:

LayerDrawable progressDrawable = (LayerDrawable) getProgressDrawable();
Drawable backgroundColor = progressDrawable.getDrawable(0);
Drawable secondaryColor = progressDrawable.getDrawable(1);
Drawable primaryColor = progressDrawable.getDrawable(2);

Я пытаюсь изменить цвета (пример):

progressDrawable.setDrawableByLayerId(progressDrawable.getId(2), new ClipDrawable(...));

но иногда экран зависает, иногда вылетает. Наконец я отказался от поисков нехватки времени. Извините: (

Michele

2 голосов
/ 02 июля 2013

Вероятно, не имеет отношения к Мишель, но, возможно, это поможет кому-то еще ..

ProgressBar progress = (ProgressBar) fullView.findViewById(R.id.main_progressbar);
LayerDrawable progressDrawable = (LayerDrawable)progress.getProgressDrawable();
Drawable drawable = activity.getResources().getDrawable(R.drawable.WHATEVER_YOU_WANT);
ClipDrawable cd = new ClipDrawable(drawable, Gravity.LEFT,ClipDrawable.HORIZONTAL);
progressDrawable.setDrawableByLayerId(android.R.id.progress, cd);
2 голосов
/ 04 июня 2011

Рисуемое, которое вы указываете с помощью setProgressDrawable, содержит фоновое, основное и дополнительное рисование. Вот пример ProgressBar Drawable , который поставляется с Android:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient ...  />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient .../>
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient ...  />
            </shape>
        </clip>
    </item>

</layer-list> 
0 голосов
/ 26 ноября 2014

Проверьте это

Вы можете использовать такой нарисованный xml, чтобы установить progressdrawable

<item android:id="@android:id/background"
    android:drawable="@drawable/progress_bar_nor">       
</item>    
<item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/progress_bar_nor">       
</item>
<item
    android:id="@android:id/progress"
    android:drawable="@drawable/progress_bar_sel"/>

Ссылка на эту ссылку

https://stackoverflow.com/a/27144594/1554031

...