尝试在 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;
}
我正在实现一个允许用户设置价格的搜索栏。 我希望 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;
}