Android ProgressBar: how to set secondary color pr

2019-04-06 09:39发布

I need to set secondary progress bar color programmatically.

I only see the method

ProgressBar.setProgressDrawable(drawable)

for set the primary color, but there isn't a method for set the secondary color.

How I can do it?

4条回答
萌系小妹纸
2楼-- · 2019-04-06 10:22

Probably not relevant to Michele, but perhaps it will help someone else..

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);
查看更多
三岁会撩人
3楼-- · 2019-04-06 10:25

ProgressBar.getProgressDrawable() returns a LayerDrawable in which:

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

I try to modify the colors whit (example):

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

but sometimes the screen freeze, sometimes crash. Finally I abandoned the search for lack of time. Sorry :(

Michele

查看更多
狗以群分
4楼-- · 2019-04-06 10:25

The drawable you specify using setProgressDrawable has background, primary and secondary drawables in it. Here is an example of ProgressBar drawable that is shipped with 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> 
查看更多
做个烂人
5楼-- · 2019-04-06 10:34

Check this

You can use a drawable xml like this to set 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"/>

Refer this link

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

查看更多
登录 后发表回答