AnderWeb / discreteSeekBar

Apache License 2.0
2.11k stars 401 forks source link

Change Indicator color while #116

Open InvictaAnima opened 6 years ago

InvictaAnima commented 6 years ago

Does anyone know how to change indicator color while scrolling?

When i use:

` class SeekBarOnProgressChangeListener implements DiscreteSeekBar.OnProgressChangeListener { int color;

    public Trap5SeekBarOnProgressChangeListener(TextView seekBarAmount) {
        this.seekBarAmount = seekBarAmount;
    }

    @Override
    public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
        seekBar.setIndicatorPopupEnabled(false);

       if(value < 20) {
            color = ContextCompat.getColor(seekBar.getContext(), R.color.colorSneekBarGreen);
        } else if(value < 41) {
            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: On first use: https://s29.postimg.org/mhofv9n3b/green.png On second use: https://s29.postimg.org/55o39ttlz/red.png

InvictaAnima commented 6 years ago

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.