如何在Android中更改SeekBar颜色?(编程)

gcxthw6b  于 2023-02-02  发布在  Android
关注(0)|答案(9)|浏览(259)

我为我的应用做了一个均衡器,但我不知道如何改变搜索条的拇指和进度颜色。它似乎是默认的粉红色,这不符合我的应用的美学。

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

zengzsys1#

要更改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类中使用此函数。

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

mklgxw1f2#

虽然使用样式是一个好主意,但它并没有提供太多的灵活性,特别是如果你想以编程方式分配颜色,我建议:
//for the progress seekBar.getProgressDrawable().setColorFilter(mThemeColor,PorterDuff.Mode.SRC_ATOP); //for the thumb handle seekBar.getThumb().setColorFilter(mThemeColor, PorterDuff.Mode.SRC_ATOP);

wlp8pajw

wlp8pajw3#

您可以通过编程方式更改的seekbar缩略图和进度颜色,如下所示:

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

8aqjt8rx4#

你可以很容易地通过代码来改变它,
例如:

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

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

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

2wnc66cl

2wnc66cl5#

你应该这样称呼你的搜索栏

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

其中YOUR_NEW_STYLE将定义所需的Seekbar的颜色。

oyxsuwqo

oyxsuwqo6#

试试这个:

seekBar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.mcolor), PorterDuff.Mode.MULTIPLY);
7vux5j2d

7vux5j2d7#

只是多一点桃色的回答

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

balp4ylt8#

Kotlin版本,并且不使用过时的方法:

val colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
    Resources.getSystem().getColor(R.color.your_color, null),
    BlendModeCompat.SRC_ATOP
)

// SeekBar progress color
seekBar.progressDrawable.colorFilter = colorFilter
// SeekBar thumb handle color
seekBar.thumb.colorFilter = colorFilter
p1iqtdky

p1iqtdky9#

//seekBar.setBackgroundColor(Color.DKGRAY);
    //seekBar.setDrawingCacheBackgroundColor(Color.DKGRAY);

Android SDK中有一些视图(ProgressBar是另一个例子),您必须使用图形颜色过滤器来更改颜色,而不是更改背景/前景源颜色。
找到.setColorFilter()方法,用一些PorterDuff滤镜,比如.Mode.MULTIPLY(取决于你最喜欢的滤镜模式)提供你的源颜色,然后就可以了。
示例:

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

相关问题