我已经看过一些关于处理ProgressBars颜色的话题,但没有人能回答我的疑问。
我使用的是水平ProgressBar
不确定类型。
我希望它有一个透明的背景,同时有一个彩色progressBar,但找不到办法。
对于普通的ProgressBar(不是Indeterminate),我可以通过调用progressBar.getProgressDrawable()
来获取LayerDrawable。然后使用findDrawableByLayerId(android.R.id.background)
,我能够为背景着色。
但是使用progressBar.getIndeterminateDrawable()
它会返回GradientDrawable
,因此我无法执行相同的操作。
是否可以从GradientDrawable
获取所有API级别的颜色?如果是的话,我可以得到背景的颜色并改变它。
有没有解决方案?
答案 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
值。
否则
progressBar.getIndeterminateDrawable()
.setColorFilter(progressBar.getContext().getResources().getColor(<colorId>),
PorterDuff.Mode.SRC_IN);