Java 尝试在android 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+,因此我需要找到一种方法,在增加最大值后禁用触摸,直到用

我正在实现一个seekbar,它允许用户设置价格。 我希望seekbar以最大值100开始,然后如果用户将seekbar一直移动到100,最大值将上升到250,如果用户将seekbar一直移动到250,它将上升到500,如果用户将seekbar一直移动到500,最后在500+处停止

我写的代码大部分都是有效的。问题是,当用户将seekbar移动到最大值时,由于用户将手指放在那里,android认为它一直处于最大值,因此它会立即增加到500+,因此我需要找到一种方法,在增加最大值后禁用触摸,直到用户抬起手指

所以…我想从seekbar中断用户的触摸,这样它就可以等到下一个新的触摸事件,这样就不会发生这种情况。如果有人知道这样做的方法,请尽快让我知道!!谢谢

我已经尝试过的是在seekbar达到最大值时禁用并重新启用它,以期打破触摸,但这不起作用

我的代码如下:

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条时,它又回到了最大进度哈,太好了!我很高兴它做到了!