2016-11-11 19 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