我试图在某个seekBar到达动态点后停止它的移动(通过减去setMax()值和其他seekBar.getProgress()计算得出)。 我尝试使用 onTouchEvent() 但无法停止栏的移动并手动设置eekBar.setProgress(),但它只会跳到该点并继续用手指移动。
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));
}
});
请帮忙
最佳答案
你有
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
条件。基本上,当进度大于该值时,您只需将其设置为该值即可。这样一来,它就不能被拖过该点。
对其他听众也做同样的事情。
关于android - 如何阻止seekBar的移动超过动态点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551267/