I'm using discreteSeekBar . Does anyone know how to change indicator color while scrolling?
When i use:
class SeekBarOnProgressChangeListener implements DiscreteSeekBar.OnProgressChangeListener {
int color;
public Trap5SeekBarOnProgressChangeListener() {
}
@Override
public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
seekBar.setIndicatorPopupEnabled(false);
if(value == 0) {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarGreen);
} else if(value < 20) {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarGreen);
} else if(value < 40) {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarYellow);
} else {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarRed);
}
seekBar.setScrubberColor(color);
seekBar.setThumbColor(color, color);
}
}
The color changes since next use of seekBar, not as i want instantly.
Proof: https://s3.postimg.org/to93ovej7/proof.png
Try This way
@Override
public void onProgressChanged(SeekBar seekBar, int value, boolean fromUser) {
if(value == 0) {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarGreen);
} else if(value < 20) {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarGreen);
} else if(value < 40) {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarYellow);
} else {
color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarRed);
}
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
seekBar.setScrubberColor(color);
seekBar.setThumbColor(color, color);
}
I succeeded at achieving my goal, this is the solution:
class SeekBarOnProgressChangeListener implements DiscreteSeekBar.OnProgressChangeListener {
int color;
int colorGreen;
int colorYellow;
int colorRed;
public SeekBarOnProgressChangeListener() {
colorGreen = ContextCompat.getColor(getContext(), R.color.colorSneekBarGreen);
colorYellow = ContextCompat.getColor(getContext(), R.color.colorSneekBarYellow);
colorRed= ContextCompat.getColor(getContext(), R.color.colorSneekBarRed);
}
@Override
public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
boolean colorChanged = false;
if(value < 20) {
if(color != colorGreen){
color = colorGreen;
colorChanged = true;
}
} else if(value < 40) {
if(color != colorYellow){
color = colorYellow;
colorChanged = true;
}
} else {
if(color != colorRed){
color = colorRed;
colorChanged = true;
}
}
if(colorChanged) {
seekBar.setScrubberColor(color);
seekBar.setThumbColor(color, color);
MotionEvent motionEvent = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_UP, 0, 0, 0);
seekBar.dispatchTouchEvent(motionEvent);
}
}
The thumb reappears in a changed color when new color is set, it is good enough for me, but if anyone has a solution that changes thumb color without recreating it, please post the solution here.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.