2016-11-11 29 views
1

我試圖在達到動態點(通過減去setMax()值和其他seekBar.getProgress())計算得到的某個seekBar後停止移動。 我嘗試使用onTouchEvent(),但無法停止欄的移動並手動設置seekBar.setProgress(),但它只跳轉到該點並繼續用手指移動。如何停止seekBar過去動態點的移動

sb1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      sb1.setMax(Integer.parseInt(et.getText().toString())); 
      if (progress >= Integer.parseInt(et.getText().toString()) - sb2.getProgress() - sb3.getProgress()) 
       sb1.setProgress(progress); 
      tv1.setText(String.valueOf(progress)); 
     } 


    }); 

    sb2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      sb2.setMax(Integer.parseInt(et.getText().toString())); 

      if (progress >= Integer.parseInt(et.getText().toString()) - sb1.getProgress() - sb3.getProgress()) 
       sb2.setProgress(progress); 
      tv2.setText(String.valueOf(progress)); 
     } 

    }); 

請幫助

回答

1

你有

if (progress >= Integer.parseInt(et.getText().toString()) - sb2.getProgress() - sb3.getProgress()) 
    sb1.setProgress(progress); 

裏面你sb1更改偵聽器。但這並沒有什麼意義,因爲progress已經是sb1的進展。我想你應該改變這樣的:

sb1.setProgress(progress); 

要:

sb1.setProgress(Integer.parseInt(et.getText().toString()) - sb2.getProgress() - sb3.getProgress()); 

我得到了進步的價值是從if條件。基本上,當進度大於該值時,只需將其設置爲該值即可。所以這樣,它不能被拖過去。

對您的其他聽衆也做同樣的事情。

+0

謝謝!有了這個答案,我設法阻止了拇指條的移動(雖然進展仍在進行,但我可以找到解決方法)。 – ProBul

+0

太棒了!很高興我能幫上忙。 –

0

禁用搜索條對象已達到所需進度後:

sb1.setEnable (false) 
+0

此方法凍結了SeekBar,但沒有選擇繼續使用它。 – ProBul