Java 尝试在android seekbar上实现最大值的动态增加
我正在实现一个seekbar,它允许用户设置价格。 我希望seekbar以最大值100开始,然后如果用户将seekbar一直移动到100,最大值将上升到250,如果用户将seekbar一直移动到250,它将上升到500,如果用户将seekbar一直移动到500,最后在500+处停止 我写的代码大部分都是有效的。问题是,当用户将seekbar移动到最大值时,由于用户将手指放在那里,android认为它一直处于最大值,因此它会立即增加到500+,因此我需要找到一种方法,在增加最大值后禁用触摸,直到用户抬起手指 所以…我想从seekbar中断用户的触摸,这样它就可以等到下一个新的触摸事件,这样就不会发生这种情况。如果有人知道这样做的方法,请尽快让我知道!!谢谢 我已经尝试过的是在seekbar达到最大值时禁用并重新启用它,以期打破触摸,但这不起作用 我的代码如下:Java 尝试在android seekbar上实现最大值的动态增加,java,android,android-seekbar,Java,Android,Android Seekbar,我正在实现一个seekbar,它允许用户设置价格。 我希望seekbar以最大值100开始,然后如果用户将seekbar一直移动到100,最大值将上升到250,如果用户将seekbar一直移动到250,它将上升到500,如果用户将seekbar一直移动到500,最后在500+处停止 我写的代码大部分都是有效的。问题是,当用户将seekbar移动到最大值时,由于用户将手指放在那里,android认为它一直处于最大值,因此它会立即增加到500+,因此我需要找到一种方法,在增加最大值后禁用触摸,直到用
private class PriceChangeListener implements SeekBar.OnSeekBarChangeListener{
private TextView priceView = (TextView) findViewById(R.id.input_price_label);
private TextView maxPriceView = (TextView) findViewById(R.id.input_price_max_label);
private boolean increaseMax;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
String textToSet = "About how much will it cost? $" + String.valueOf(progress);
if(progress < 500)
priceView.setText(textToSet);
else
priceView.setText(textToSet + "+");
if(progress == seekBar.getMax() && increaseMax) {
seekBar.setEnabled(false);
switch (progress) {
case 100:
seekBar.setMax(250);
increaseMax = false;
maxPriceView.setText("$" + String.valueOf(seekBar.getMax()));
break;
case 250:
seekBar.setMax(500);
increaseMax = false;
maxPriceView.setText("$" + String.valueOf(seekBar.getMax()));
break;
case 500:
maxPriceView.setText("$500+");
break;
}
seekBar.setEnabled(true);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
increaseMax = true;
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// Do nothing
}
}
私有类PriceChangeListener实现SeekBar.OnSeekBarChangeListener{
私有TextView价格视图=(TextView)findViewById(R.id.input\u price\u label);
私有TextView maxPriceView=(TextView)findViewById(R.id.input\u price\u max\u标签);
私有布尔递增最大值;
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
String textToSet=“大约要花多少钱?$”+String.valueOf(进度);
如果(进度<500)
priceView.setText(textToSet);
其他的
priceView.setText(textToSet+“+”);
if(progress==seekBar.getMax()&&increaseMax){
seekBar.setEnabled(false);
开关(进度){
案例100:
seekBar.setMax(250);
increaseMax=false;
maxPriceView.setText(“$”+String.valueOf(seekBar.getMax());
打破
案例250:
seekBar.setMax(500);
increaseMax=false;
maxPriceView.setText(“$”+String.valueOf(seekBar.getMax());
打破
案例500:
maxPriceView.setText($500+);
打破
}
seekBar.setEnabled(真);
}
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
递增最大值=真;
}
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
//无所事事
}
}
进一步改进我的评论,试一试
private boolean newTouch = false;
private int oldProgress;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
if (newTouch) {
oldProgress = progress;
priceView.setText("About how much will it cost? $" + String.valueOf(progress));
if(progress == seekBar.getMax()) {
newTouch = false;
switch (progress) {
case 100:
seekBar.setMax(250);
seekBar.setProgress(100);
maxPriceView.setText("$" + String.valueOf(seekBar.getMax()));
break;
case 250:
seekBar.setMax(500);
seekBar.setProgress(250);
maxPriceView.setText("$" + String.valueOf(seekBar.getMax()));
break;
case 500:
seekBar.setProgress(250);
maxPriceView.setText("$500+");
break;
}
}
} else {
seekBar.setProgress(oldProgress);
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
newTouch = true;
}
进一步改进我的评论,试一试
private boolean newTouch = false;
private int oldProgress;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
if (newTouch) {
oldProgress = progress;
priceView.setText("About how much will it cost? $" + String.valueOf(progress));
if(progress == seekBar.getMax()) {
newTouch = false;
switch (progress) {
case 100:
seekBar.setMax(250);
seekBar.setProgress(100);
maxPriceView.setText("$" + String.valueOf(seekBar.getMax()));
break;
case 250:
seekBar.setMax(500);
seekBar.setProgress(250);
maxPriceView.setText("$" + String.valueOf(seekBar.getMax()));
break;
case 500:
seekBar.setProgress(250);
maxPriceView.setText("$500+");
break;
}
}
} else {
seekBar.setProgress(oldProgress);
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
newTouch = true;
}
如果在onStartTrackingTouch()上设置为true,而在导引头达到最大值时设置为false,那么布尔值又如何呢?如果布尔值为false,则不增加max@howdoidothis好主意,这修复了值的设置,但是进度条仍然停留在用户上次握住手指的地方,它真的需要完全断开触摸才能成为可行的实现真的吗?美好的你说它留在那里是什么意思?因此,当用户达到100,也就是最大值时,最大值被设置为250,但由于该条处于最大值,它是否只是停留在现在为250的位置?这就是你的意思吗?如果是,请尝试手动设置该值,例如,在调用setMax(250)@howdo后立即将其设置为100。当你将搜索杆移动到100时,它会将最大值更改为250,搜索杆保持在同一位置(现在是250,因为你的手指仍然在那里,足够长的时间让android认为它又被移动了)。它需要做的是在seekbar上返回到新的位置100,并一直保持在那里,直到用户再次移动它。那么在StartTrackingTouch()上设置为true的布尔值呢,当导引头达到最大值时为false?如果布尔值为false,则不增加max@howdoidothis好主意,这修复了值的设置,但是进度条仍然停留在用户上次握住手指的地方,它真的需要完全打破触摸才能成为可行的实现真的吗?很好!!这是什么意思停留在那里?所以当用户达到100,即最大值时,最大值设置为250,但由于该条处于最大值,它是否只停留在现在为250的位置上?这是您的意思吗?如果是,请尝试手动设置该值,例如,在调用setMax(250)后立即设置为100@怎么做当你将搜索杆移动到100时,它会将最大值更改为250,搜索杆保持在相同的位置(现在是250,因为你的手指在那里的时间足够长,android会认为它又被移动了)。它需要做的是在seekbar上返回到新的位置100,并一直停留在那里,直到用户再次移动它。工作非常漂亮。尽管您忘记在将oldProgress设置为current progress的行中添加:)我在检查newTouch的正下方添加了该选项。谢谢,当你在做这个的时候,我试着在一个新的线程中使用一个runnable,它禁用,休眠,然后重新启用seekbar,让用户有时间放手-哈哈。当它醒来并重新启动seek条时,它又回到了最大进度哈,太好了!我很高兴它做到了!工作得很漂亮。虽然您忘了在将oldProgress设置为currentprogress的行中添加:),但我在newTouch检查的正下方添加了它。谢谢,当你在做这个的时候,我试着在一个新的线程中使用一个runnable,它禁用,休眠,然后重新启用seekbar,让用户有时间放手-哈哈。当它醒来并重新启动seek条时,它又回到了最大进度哈,太好了!我很高兴它做到了!