【发布时间】:2012-03-23 10:44:10
【问题描述】:
我有自定义搜索栏,我可以通过设置新的进度可绘制来更改 onProgressChanged 中的颜色:
seek.setProgressDrawable(res.getDrawable(R.drawable.seekbar_bg1));
但我想要一个根据进度从绿色到红色的纯色搜索栏。 有没有办法使用渐变色之类的东西,这样我就不需要创建 100 个可绘制对象?
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:id="@+id/progressshape">
<clip>
<shape>
<solid android:color="@color/custom_yellow" />
</shape>
</clip>
</item>
</layer-list>
对于那些对解决方案感兴趣的人。我使用以下代码:
这个方法来设置颜色:
public void setProgressBarColor(int newColor){
LayerDrawable ld = (LayerDrawable) getProgressDrawable();
ClipDrawable d1 = (ClipDrawable) ld.findDrawableByLayerId(R.id.progressshape);
d1.setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
}
在 onProgressChanged 中:
if(progress <= 50){
seek.setProgressBarColor(Color.rgb( 255 - (255/100 * (100 - progress*2)), 255, 0));
}else{
seek.setProgressBarColor(Color.rgb( 255, 255 - (255/100 * (progress - 50)*2), 0));
}
【问题讨论】: