尝试在 android 搜索栏上实现最大的动态增加

trying to implement dynamic increase of max on android seekbar

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

我编写的代码大部分都有效。问题是,当用户将搜索栏移动到最大值时,由于用户将手指放在那里,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("0+");
                    break;
            }
            seekBar.setEnabled(true);
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        increaseMax = true;
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // Do nothing
    }
}

进一步完善我的评论,试一试

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("0+");
                    break;
            }
        }
    } else {
        seekBar.setProgress(oldProgress);
    }
}
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
    newTouch = true;
}