Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中更改SeekBar颜色?(以编程方式)_Java_Android_Seekbar - Fatal编程技术网

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

Java 如何在android中更改SeekBar颜色?(以编程方式),java,android,seekbar,Java,Android,Seekbar,我做了一个均衡器来配合我的应用程序,但我不知道如何才能改变seekbar的拇指和进度颜色。默认情况下它看起来是粉红色的,这不符合我的应用程序的美学 SeekBar seekBar = new SeekBar(this); seekBar.setId(i); seekBar.setLayoutParams(layoutParams); seekBar.setMax(upperEqualizerBandLevel - lowerEqualizer

我做了一个均衡器来配合我的应用程序,但我不知道如何才能改变seekbar的拇指和进度颜色。默认情况下它看起来是粉红色的,这不符合我的应用程序的美学

 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

SeekBar newSeek = new SeekBar(this, null, R.style.YOUR_NEW_STYLE);
其中
您的新样式将定义所需的
Seekbar
的颜色。

尝试以下操作:

seekBar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.mcolor), PorterDuff.Mode.MULTIPLY);
Android SDK中很少有视图(ProgressBar是另一个示例)需要使用图形颜色过滤器来更改颜色,而不是更改背景/前景源颜色

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

例如:

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

要更改
Seekbar
thumb的颜色,请在
style.xml

<style name="SeekBarColor"
  parent="Widget.AppCompat.SeekBar"> 
  <item name="colorAccent">@color/your_color</item> 
</style>
这两种方法都适用于API>16的情况

编辑

通过Java代码更改SeekBar拇指的颜色

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

虽然使用样式是一个好主意,但它没有提供太多的灵活性,特别是如果您希望以编程方式指定颜色,我建议:

//查看进度
请参见kbar.getProgressDrawable().setColorFilter(mThemeColor,PorterDuff.Mode.SRC_);
//拇指把手

seekBar.getThumb().setColorFilter(mThemeColor,PorterDuff.Mode.SRC_)

您可以通过编程方式更改seekbar thumb和progress的颜色,如下所示:

   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)));


希望它能对将来的某个人有所帮助。

只是一个更贴切的回答

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

这不会改变大拇指,谢谢。我使用了后者,因为我通过编程为均衡器制作了seekbar。进度颜色更改,但我无法更改拇指。我能做些什么吗?答案的第一部分说明了如何改变seekbar拇指的颜色。我添加了这段代码,因为它在更广泛的API范围内运行。检查Java代码的编辑答案以更改seekbar thumb颜色(仅适用于android 5及以上版本)。在高API级别中不推荐更改布局,请参阅。这很有帮助。
   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);
}