有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java试图在安卓 seekbar上实现最大值的动态增加

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

我写的代码大部分都是有效的。问题是,当用户将seekbar移动到最大值时,由于用户将手指放在那里,安卓认为它一直处于最大值,因此它会立即增加到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
    }
}

共 (1) 个答案

  1. # 1 楼答案

    进一步改进我的评论,试一试

    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;
    }