更改Indeterminate Horizo​​ntal ProgressBar的背景颜色

时间:2017-01-24 21:17:24

标签: android

我已经看过一些关于处理ProgressBars颜色的话题,但没有人能回答我的疑问。

我使用的是水平ProgressBar不确定类型。 我希望它有一个透明的背景,同时有一个彩色progressBar,但找不到办法。

对于普通的ProgressBar(不是Indeterminate),我可以通过调用progressBar.getProgressDrawable()来获取LayerDrawable。然后使用findDrawableByLayerId(android.R.id.background),我能够为背景着色。

但是使用progressBar.getIndeterminateDrawable()它会返回GradientDrawable,因此我无法执行相同的操作。

是否可以从GradientDrawable获取所有API级别的颜色?如果是的话,我可以得到背景的颜色并改变它。

有没有解决方案?

3 个答案:

答案 0 :(得分:2)

使用这样的滤镜:

progressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.MULTIPLY);

答案 1 :(得分:1)

progressBar.setProgressDrawable(R.drawable.progress_bar);

抽拉/ progress_bar.xml

<layer-list   xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape>
        <corners android:radius="2dip" />
        <gradient android:startColor="#43ffffff" android:centerColor="#43ffffff" android:centerY="0.75" android:endColor="#43ffffff" android:angle="270" />
    </shape>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="2dip" />
            <gradient android:startColor="#fff" android:endColor="#fff" android:angle="270" />
        </shape>
    </clip>
</item> </layer-list>

您可以在此progress_bar.xml drawable中更改颜色

答案 2 :(得分:0)

第1步:将SDK中的drawable/progress_indeterminate_horizontal.xml资源复制到您的项目中。

第2步:将SDK中的drawable-hdpi/progressbar_indeterminate*资源复制到您的项目中。

第3步:将SDK中的drawable-mdpi/progressbar_indeterminate*资源复制到您的项目中。

步骤4:修改PNG文件,使其看起来像你想要的那样。

步骤5:修改progress_indeterminate_horizontal.xml以指向您的PNG文件(与标准文件相比)。

步骤6:将@drawable/progress_indeterminate_horizontal用于indeterminateDrawable值。

Source

否则

progressBar.getIndeterminateDrawable()
    .setColorFilter(progressBar.getContext().getResources().getColor(<colorId>),
        PorterDuff.Mode.SRC_IN);