ramya
ramya

Reputation: 368

How to stop a progress of the seekbar only at constant interval

I have a seekbar which ranges from 0 - 100 .I want to create discrete points in the seekbar such that progress stops only at 0,10,20 and so on .I don't to stop in the midddle. I tried with the below code and I am unable to succeed.

 seekBar.setProgress(0);
    //seekBar.incrementProgressBy(10);
    seekBar.setMax(100);

 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {                   progress = progress / 10;
            progress = progress * 10;
            seekBarValue.setText(String.valueOf(progress));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {


        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int seekBarIntValue;
        //    seekBar.incrementProgressBy(10);
            if((seekBar.getProgress()%10)!=0){
                if((seekBar.getProgress()%10)> 5)
                {
                     seekBarIntValue =(seekBar.getProgress()/10)+(seekBar.getProgress()%10);

                }else{
                     seekBarIntValue =(seekBar.getProgress()/10)-(seekBar.getProgress()%10);
                }

            }else{
                 seekBarIntValue = (seekBar.getProgress());
            }
            seekBar.setProgress(seekBarIntValue);

        }
    });

Please help me out to solve this.

Upvotes: 1

Views: 1008

Answers (4)

Linh
Linh

Reputation: 60923

Example force SeekBar stop at 30

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if(progress > 30){
            seekBar.setProgress(30);
            return;
        }
        tvProgress.setText(""+progress);
    }

    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    public void onStopTrackingTouch(SeekBar seekBar) {
    }
});

Upvotes: 0

GrIsHu
GrIsHu

Reputation: 23638

Try out below code

 seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        int progress = 0;

        @Override
        public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
            progress = progresValue;
           seekBarValue.setText(progress + "/" + seekBar.getMax());
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // Do something here, if you want to do anything at the start of
            // touching the seekbar
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // Display the value in textview

        }
    });

Upvotes: 0

Nikhil Borad
Nikhil Borad

Reputation: 2085

for that you need to override onProgressChanged method. i did it in this manner.

@Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

        int interval = 20;

        progress = (progress/interval)*interval;
        seekBar.setProgress(progress);

    }

Upvotes: 0

Rujul Gandhi
Rujul Gandhi

Reputation: 1390

Try this.

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
  // round progress up or down to the nearest 10
  int roundedProgress = (int) (Math.rint((double) progress / 10) * 10);
  if (fromUser)
  {
    seekBar.setProgress(roundedProgress);
  }
}

Upvotes: 2

Related Questions