how to change SeekBar color in android? (Programmatically)

青春壹個敷衍的年華 提交于 2019-12-06 03:19:33

问题


I made an equalizer to go with my app but I am not sure how I can change the seekbar's thumb and progress color. It seems to be pink by default and that doesn't fit my app's aesthetics.

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

回答1:


To change the color of the Seekbar thumb, create a new style in style.xml

<style name="SeekBarColor"
  parent="Widget.AppCompat.SeekBar"> 
  <item name="colorAccent">@color/your_color</item> 
</style>

Finally in the layout:

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

To change the Seekbar progress color, use this in Java Class.

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

Both these will work for API>16.

Edit

To change SeekBar thumb color by Java code.

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



回答2:


While using a style is a good idea, it does not provide much flexibility specially if you want to assign the colors programmatically I suggest:

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




回答3:


You can change seekbar thumb and progress colors for programmatically like this:

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



回答4:


You need to call you seekbar like this

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

where YOUR_NEW_STYLE will define the colors of the Seekbar that you want.




回答5:


try this :

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



回答6:


You can easily change it via code,

For example:

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

or

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

Hoping that it will be helpfull for someone in future.




回答7:


Just a little more peachy answer

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



回答8:


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

There are few Views in Android SDK (ProgressBar is another example) in which you have to change colour using graphical color filters, instead of changing Background / Foreground source colour.

Find .setColorFilter() method, supply your source colour into it with some PorterDuff filter, like .Mode.MULTIPLY (depending on what filter mode you like best) and there you go.

Example:

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


来源:https://stackoverflow.com/questions/45329174/how-to-change-seekbar-color-in-android-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!