【问题标题】:Change the color of a seekbar on onProgressChanged在 onProgressChanged 上更改搜索栏的颜色
【发布时间】: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));
 }

【问题讨论】:

    标签: android colors seekbar


    【解决方案1】:

    我用这种方法做这样的事情:

    public void setProgressBarColor(ProgressBar progressBar, int newColor){ 
        LayerDrawable ld = (LayerDrawable) progressBar.getProgressDrawable();
        ClipDrawable d1 = (ClipDrawable) ld.findDrawableByLayerId(R.id.progressshape);
        d1.setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
    
    }
    

    然后,当您更新进度时,您只需更改所需的颜色即可。

    【讨论】:

    • 如何访问默认使用的R.id.progressshape?
    • "android.R.id.progress" via code 或 "@android:id/progress" via xml(不知道这是否是你要求的)
    • 这对我有用,直到 Android 5.0,其中 getProgressDrawable() 返回 StateListDrawable 而不是 Drawable,并抛出 ClassCastException。我已将此报告为错误,并在错误报告中包含了解决方法:code.google.com/p/android/issues/detail?id=82062
    【解决方案2】:

    使用这个:

    bar.setProgressDrawable(new ColorDrawable(Color.rgb( red, green, blue)));
    

    随着进度的变化改变红色,绿色,蓝色。

    【讨论】:

    • thnx 试图提供帮助,但可绘制的进度需要像上面那样(带有形状和剪辑的图层列表).. 你知道我如何以编程方式创建这个可绘制对象或编辑剪辑吗运行时的形状颜色?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多