Search code examples
androidrgbandroid-seekbar

Set 3 seekbars to change RGB channels


I'm following this guy that wrote a code that change background color based on RGB channels assigned to 3 different seekbars, so R to one sk, G to another and B to another one.

The problem is that I can't get the code to work:

private int seekR, seekG, seekB;    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_color_changer);

    SeekBar sbR = (SeekBar) findViewById(R.id.RedSeekBar);
    SeekBar sbG = (SeekBar) findViewById(R.id.GreenSeekBar);
    SeekBar sbB = (SeekBar) findViewById(R.id.BlueSeekBar);

    mySeekBarChangeListener msbclR = new mySeekBarChangeListener();
    mySeekBarChangeListener msbclG = new mySeekBarChangeListener();
    mySeekBarChangeListener msbclB = new mySeekBarChangeListener();

    sbR.setonseekBarChangeListener(msbclR);
    sbG.setonseekBarChangeListener(msbclG);
    sbB.setonseekBarChangeListener(msbclB);

    msbclR.onprogressChanged(sbR, sbR.getProgress(), false);
    msbclG.onprogressChanged(sbG, sbG.getProgress(), false);
    msbclB.onprogressChanged(sbB, sbB.getProgress(), false);

}

This text give me an error almost everywhere, whatever, nothing seems to work. I just want to know why.. Do I have to set something based on that mySeekBarChangeListener? Thanks in advance!


Solution

  • It should work:

    private int seekR, seekG, seekB;    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_color_changer);
    
        SeekBar sbR = (SeekBar) findViewById(R.id.RedSeekBar);
        SeekBar sbG = (SeekBar) findViewById(R.id.GreenSeekBar);
        SeekBar sbB = (SeekBar) findViewById(R.id.BlueSeekBar);
    
        sbR.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                seekR = progress;
    
                doSomethingWithColor();
            }
        });
    
        sbG.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                seekG = progress;
    
                doSomethingWithColor();
            }
        });
    
        sbB.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                seekB = progress;
    
                doSomethingWithColor();
            }
        });
    
    }
    
    private void doSomethingWithColor() {
        int color = Color.rgb(seekR, seekG, seekB);
        // Do something with color
    }
    

    or more compact

    private int seekR, seekG, seekB;    
    
    private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
    
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            switch (seekBar.getId()) {
            case R.id.RedSeekBar:
                seekR = progress;
                break;
            case R.id.GreenSeekBar:
                seekG = progress;
                break;
            case R.id.BlueSeekBar:
                seekB = progress;
                break;
            }
    
            doSomethingWithColor();
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_color_changer);
    
        SeekBar sbR = (SeekBar) findViewById(R.id.RedSeekBar);
        SeekBar sbG = (SeekBar) findViewById(R.id.GreenSeekBar);
        SeekBar sbB = (SeekBar) findViewById(R.id.BlueSeekBar);
    
        sbR.setOnSeekBarChangeListener(onSeekBarChangeListener);
        sbG.setOnSeekBarChangeListener(onSeekBarChangeListener);
        sbB.setOnSeekBarChangeListener(onSeekBarChangeListener);
    
    }
    
    private void doSomethingWithColor() {
        int color = Color.rgb(seekR, seekG, seekB);
        // Do something with color
    }
    

    another one

    private int seekR, seekG, seekB;    
    
    public class MySeekBarChangeListener implements SeekBar.OnSeekBarChangeListener {
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
    
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            switch (seekBar.getId()) {
            case R.id.RedSeekBar:
                seekR = progress;
                break;
            case R.id.GreenSeekBar:
                seekG = progress;
                break;
            case R.id.BlueSeekBar:
                seekB = progress;
                break;
            }
    
            doSomethingWithColor();
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_color_changer);
    
        SeekBar sbR = (SeekBar) findViewById(R.id.RedSeekBar);
        SeekBar sbG = (SeekBar) findViewById(R.id.GreenSeekBar);
        SeekBar sbB = (SeekBar) findViewById(R.id.BlueSeekBar);
    
        MySeekBarChangeListener msbclR = new MySeekBarChangeListener();
        MySeekBarChangeListener msbclG = new MySeekBarChangeListener();
        MySeekBarChangeListener msbclB = new MySeekBarChangeListener();
    
        sbR.setOnSeekBarChangeListener(msbclR);
        sbG.setOnSeekBarChangeListener(msbclG);
        sbB.setOnSeekBarChangeListener(msbclB);
    
    }
    
    private void doSomethingWithColor() {
        int color = Color.rgb(seekR, seekG, seekB);
        // Do something with color
    }