Подтвердить что ты не робот

Изменение значений шагов в строке поиска?

У меня есть стрелка, а при перемещении я хочу изменить значения от 0 до 200. У меня есть TextView, где я отображаю эти значения при перемещении стрелки. Но я не хочу иметь каждое значение с этого интервала (0,1,2,3,4,5...), но иметь 10, 20, 30... и так далее. Поэтому, когда я перемещаю поиск, я хочу отобразить 10,20,30,40.... до 200. Может ли кто-нибудь дать мне подсказку или пример, как это сделать?

4b9b3361

Ответ 1

Попробуйте ввести код

SeekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.incrementProgressBy(10);
seekBar.setMax(200);
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(tvRadius.getText().toString().trim());

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        progress = progress / 10;
        progress = progress * 10;
        seekBarValue.setText(String.valueOf(progress));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});

setProgress(int) используется для установки начального значения строки поиска

setMax(int) используется для установки максимального значения строки поиска

Если вы хотите установить границы поиска, то вы можете проверить значение progressbar в методе onProgressChanged. Если прогресс меньше или больше границы, вы можете установить прогресс на указанную вами границу.

Ответ 2

Легкий способ, о котором я могу думать, просто определяет:

SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId);
yourSeekbar.setMax(20);

Затем переопределите эти методы (необходимы и пустые методы, даже если они пусты):

yourSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {          
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (fromUser) {
                if (progress >= 0 && progress <= sizeSeekBar.getMax()) {                        

                    String progressString = String.valueOf(progress * 10);
                    yourTextView.setText(progressString); // the TextView Reference
                    seekBar.setSecondaryProgress(progress);
                }
            }

        }
    });

Идея состоит в том, чтобы определять только 20 значений для поиска, но всегда умножать значение на 10 и отображать это значение. Если вам не нужны 200 значений, тогда нет смысла использовать 200 значений.

Ответ 3

Вы должны использовать SeekBar.OnSeekBarChangeListener для отслеживания изменения хода. Вызовите mseek.setMax(200). Выполняйте операцию по модулю текущего значения, чтобы решить, нужно ли обновлять текст или нет.

SeekBar.OnSeekBarChangeListener() {

    void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (progress % 10 == 0) {
            textview.setText(""+progress);
        }
    }
}

Ответ 4

Вы также можете достичь этого, указав собственный класс SeekBar, как показано ниже

public class CustomSeekBar extends AppCompatSeekBar {


int SEEKBAR_MULTIPLIER = 1;

public CustomSeekBar(Context context) {
    super(context);
}

public CustomSeekBar(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

public void setSeekBarConfig( int SEEKBAR_MULTIPLIER, int SEEKBAR_MAX){
    setMax(SEEKBAR_MAX);
    this.SEEKBAR_MULTIPLIER = SEEKBAR_MULTIPLIER;
}

@Override
public int getProgress() {
    return super.getProgress() * SEEKBAR_MULTIPLIER;
}
}

И может использоваться следующим образом

 CustomSeekBar mCustomSeekBar = (CustomSeekBar) findViewById(R.id.customSeekBar);
 mSeekBar.setSeekBarConfig(10,20);

В xml вы должны добавить CustomSeekBar вместо SeekBar

<*.CustomSeekBar
    com.quemb.qmbform.view:setSeekBarConfig="10"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar" />

Чтобы вы могли повторно использовать пользовательский seekBar в целом приложении, не повторяя весь дополнительный расчет.

Ответ 5

для минимальной проблемы вы можете установить смещение на своем прогрессе. Таким образом, пользователь не может перейти под минимальное значение.

int offset = 10;

seekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.setMax(190); //with the offset, you need to adapt the max value
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(""+(seekBar.getProgress() + offset));

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        progress += offset;

        seekBarValue.setText(String.valueOf(progress));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});

Ответ 6

использовать функцию Math.round

fun round(n: Int): Int {
    // Smaller multiple
    val a = n / 10 * 10
    // Larger multiple
    val b = a + 10
    // Return of closest of two
    return if (n - a > b - n) b else a
}

Ответ 7

Одним из возможных решений было бы установить seekBar.setMax(20) (или android:max="20" в XML), и всякий раз, когда вы используете или отображаете значение, умножьте его на 10.

SeekBar будет двигаться не менее 20 за раз.