2016-07-26 75 views
1
private static int INCREMENT_BY = 10; 
private static int MAX = 1000; 
private static int MIN = 0; 
SeekBar seekbar_min, seekbar_max; 
private int max = 0, min = 0; 


seekbar_min.setProgress(MIN); 
    seekbar_min.incrementProgressBy(INCREMENT_BY); 
    seekbar_min.setMax(MAX); 
    seekbar_min.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      progress = progress/INCREMENT_BY; 
      progress = progress * INCREMENT_BY; 
      if (progress < 100) { 
       min = progress * 10; 
      } else if (progress < 300) { 
       min = progress * 50; 
      } else if (progress < 900) { 
       min = progress * 100; 
      } else { 
       min = progress * MAX; 
      } 
      tv_price_min.setText(String.valueOf(min)); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      if (seekBar.getProgress() != MIN || seekBar.getProgress() != MAX){ 
       if (seekBar.getProgress() < 100) { 
        max = seekBar.getProgress() + 10; 
       } else if (seekBar.getProgress() < 300) { 
        max = seekBar.getProgress() + 50; 
       } else if (seekBar.getProgress() < 900) { 
        max = seekBar.getProgress() + 100; 
       } else { 
        max = seekBar.getProgress() + MAX; 
       } 
       seekbar_max.setProgress(max); 
      } 
     } 
    }); 


    seekbar_max.incrementProgressBy(INCREMENT_BY); 
    seekbar_max.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      progress = progress/INCREMENT_BY; 
      progress = progress * INCREMENT_BY; 
      if (progress < 100) { 
       max = progress * 10; 
      } else if (progress < 300) { 
       max = progress * 50; 
      } else if (progress < 900) { 
       max = progress * 100; 
      } else { 
       max = progress * MAX; 
      } 
      tv_price_max.setText(String.valueOf(max)); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

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

Seek bar對於最大價格必須具有最小值,即Minimum Seek Bar的當前值。我可以成功地做到這一點,但問題是,最大搜索欄允許將最小值更改爲0,這是我不想要的。設置Android的最小值搜尋欄

+0

您不能設置最小值,您只能定義最大值。 – Amir

+0

解決方案是將0轉換爲正在進行的最小值ChangeChanged – Amir

+0

不,我可以使用setProgress()方法設置最小值。但是,如果用戶不更改最大搜索欄值,則用戶可以使用,當用戶更改最大搜索欄值時,它會發生變化。 – JoJo

回答

2

Seekbar我們沒有setMin函數(只是有setMax),最小值始終爲零。如果你想爲你的Seekbar您可以有兩個選擇最小值:

  • 轉換零值你minimumValue
  • 在ProgressChange不允許去那個最小的下面下面的代碼片段:
if (seekbar.getProgress() < MIN_VALUE) { 
    seekbar.setProgress(MIN_VALUE); 
} 
0

實際上你不能定義最小值。 但有技巧,我總是用:在「onProgressChanged」梅託德

,把這段代碼

int min = 1;         //The Min Value You Want To 
int progressValue; 

if(i < min) {        // i : Progress Value 
    progressValue = min; 
    seekBar.setProgress(min); 
       }else progressValue = i; 
1

試試這個,我能做到這一點對我的項目之一。在這種情況下,最大值爲23,最小值爲8.

 seekBarLength = findViewById(R.id.seekBarLength); 
     seekBarLength.setMax(23-8); 
     seekBarLength.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       progress += 8; 
       textViewPasswordLength.setText(progress + ""); 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 

      } 
     });