2016-12-02 1 views
0

У меня есть стрелка, которая колеблется от 0 до 100. Я хочу создать дискретные точки в панели поиска, чтобы прогресс останавливался только на 0,10,20 и так далее. Я не останавливаюсь на этом пути. Я пробовал с приведенным ниже кодом, и я не могу добиться успеха.Как остановить ход поискового бара только с постоянным интервалом

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

     } 
    }); 

Пожалуйста, помогите мне решить эту проблему.

+0

, если ответ правильный, то сделать его правильно. Поэтому кто-то может его использовать. –

ответ

1

Попробуйте это.

@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); 
    } 
} 
0

Для этого вам необходимо переопределить метод onProgressChanged. Я сделал это таким образом.

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

     int interval = 20; 

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

    } 
0

Попробуйте ниже код

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 

     } 
    }); 
0

Пример силы SeekBar остановка на 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) { 
    } 
}); 
Смежные вопросы