如何更改 android 中的 SeekBar 颜色? (以编程方式)

how to change SeekBar color in android? (Programmatically)

我为我的应用程序制作了一个均衡器,但我不确定如何更改搜索栏的缩略图和进度条颜色。默认情况下它似乎是粉红色的,这不符合我的应用程序的美学。

 SeekBar seekBar = new SeekBar(this);

        seekBar.setId(i);

        seekBar.setLayoutParams(layoutParams);
        seekBar.setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);

        seekBar.setProgress(mEqualizer.getBandLevel(equalizerBandIndex));
        //seekBar.setBackgroundColor(Color.DKGRAY);
        //seekBar.setDrawingCacheBackgroundColor(Color.DKGRAY);

你需要这样称呼你的搜索栏

SeekBar newSeek = new SeekBar(this, null, R.style.YOUR_NEW_STYLE);

其中 YOUR_NEW_STYLE 将定义您想要的 Seekbar 的颜色。

试试这个:

seekBar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.mcolor), PorterDuff.Mode.MULTIPLY);
    //seekBar.setBackgroundColor(Color.DKGRAY);
    //seekBar.setDrawingCacheBackgroundColor(Color.DKGRAY);

在 Android SDK 中很少有视图(ProgressBar 是另一个示例)中您必须使用图形滤色器更改颜色,而不是更改背景/前景源颜色。

找到 .setColorFilter() 方法,使用一些 PorterDuff 滤镜将源颜色输入其中,例如 .Mode.MULTIPLY(取决于您最喜欢的滤镜模式)然后就可以了。

示例:

seekBar.setColorFilter(new PorterDuffColorFilter(srcColor,PorterDuff.Mode.MULTIPLY));

要更改 Seekbar 缩略图的颜色,请在 style.xml

中创建新样式
<style name="SeekBarColor"
  parent="Widget.AppCompat.SeekBar"> 
  <item name="colorAccent">@color/your_color</item> 
</style>

终于在布局中:

<SeekBar
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:theme="@style/SeekBarColor" />

要更改 Seekbar 进度颜色,请在 Java Class 中使用它。

seekBar.getProgressDrawable().setColorFilter("yourcolor", PorterDuff.Mode.MULTIPLY);

这两个都适用于 API>16。

编辑

通过 Java 代码更改 SeekBar 缩略图颜色。

 seekBar.getProgressDrawable().setColorFilter(getResources().getCo‌​lor(R.color.your_color‌​), PorterDuff.Mode.SRC_ATOP);

虽然使用样式是个好主意,但如果您想以编程方式分配颜色,它并不能提供太多灵活性,我建议:

//for the progress seekBar.getProgressDrawable().setColorFilter(mThemeColor,PorterDuff.Mode.SRC_ATOP); //for the thumb handle seekBar.getThumb().setColorFilter(mThemeColor, PorterDuff.Mode.SRC_ATOP);

您可以像这样以编程方式更改搜索栏缩略图和进度颜色:

   seekBar.getProgressDrawable().setColorFilter(Utils.getAccentColor(this), PorterDuff.Mode.SRC_IN);
   seekBar.getThumb().setColorFilter(Utils.getAccentColor(this), PorterDuff.Mode.SRC_IN);

您可以通过代码轻松更改它,

例如:

seekbar.setProgressTintList(ColorStateList.valueOf(Color.parseColor(#000000)));

seekbar.setProgressTintList(ColorStateList.valueOf(Color.RED));

希望对以后的人有所帮助。

再多一点桃色回答

public static void setSeekBarColor(SeekBar seekBar, int color) {
    seekBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
    seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
}