如何在运行时动态更改SeekBar的进度颜色?

时间:2014-12-12 13:35:35

标签: java android xml android-seekbar

我试图找到解决这个问题的方法,但我尝试的任何东西似乎都没有达到我想要的效果。

在我的应用中,我有一个SeekBar,我想改变颜色以匹配正在播放的当前文件(用户可以为不同的文件设置不同的颜色)。 我的问题是我无法在运行时找到设置搜索栏的进度和拇指颜色的方法,因为我不知道在应用程序运行之前将使用什么颜色,所以我无法为每种颜色创建XML drawable。 / p>

如果有人知道在运行时改变SeekBar进度和拇指颜色的方法,我将非常感谢他们的帮助。

谢谢,Corey B

1 个答案:

答案 0 :(得分:2)

对于那些有同样问题的人。从上面的代码我知道你想改变SeekBar的颜色 我有同样的问题,经过大量的搜索,我自己创造了方法。

public void changeSeekbarColor(SeekBar s,int colorp,int colors,int color b)
{
    PorterDuff.Mode mMode = PorterDuff.Mode.SRC_ATOP;

    LayerDrawable layerDrawable = (LayerDrawable) s.getProgressDrawable();
    Drawable progress = (Drawable) layerDrawable.findDrawableByLayerId(android.R.id.progress);
    Drawable secondary = (Drawable) layerDrawable.findDrawableByLayerId(android.R.id.secondaryProgress);
    Drawable background = (Drawable) layerDrawable.findDrawableByLayerId(android.R.id.background);
    Drawable th = s.getThumb();

    // Setting colors
    progress.setColorFilter(colorp,mMode);
    secondary.setColorFilter(colors,mMode);
    background.setColorFilter(colorb, mMode);
    th.setColorFilter(colorp,mMode);

    // Applying Tinted Drawables 
    layerDrawable.setDrawableByLayerId(android.R.id.progress, progress);

    layerDrawable.setDrawableByLayerId(android.R.id.secondaryProgress, secondary);

    layerDrawable.setDrawableByLayerId(android.R.id.background, background);

}