Java 如何在android中更改SeekBar颜色?(以编程方式)
我做了一个均衡器来配合我的应用程序,但我不知道如何才能改变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 = 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().getColor(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);
}