Android Как добавлять тексты интервалов в брелка

Я использую поисковую панель, и я хочу добавить определенные метки в строке поиска с текстом, чтобы использовать его как шкалу. Выбранные интервальные точки должны быть выделены. enter image description here

Соответствующий код находится здесь:

   seekbar = (SeekBar) findViewById(R.id.seekBar1);
    seekbar.setMax(max);
    seekbar.setProgress(50);
    seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            value.setText("SeekBar value is " + progress);
        }

        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }
    });

Ответ 1

Чтобы сделать вышеуказанную строку поиска, вам сначала нужно добавить шкалу измерения в качестве фонового рисунка. Затем вам нужно будет создавать текстовые поля для каждого интервала на шкале измерения.

<SeekBar 
        ....
android:progressDrawable="@drawable/progress"
android:thumb="@drawable/thumb"
        ....
/>

Тогда

public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {   
   progress = ((int)Math.round(progress/interval))*interval;
   seekBar.setProgress(progress);
   if(progress==5) textBox5.setTextColor(Color.RED);
   else if(progress==10) textBox10.setTextColor(Color.RED);
   //......... for all the text boxes.
}

Ответ 2

Собственно, все приведенные выше решения заставляют выбирать последнюю точку прогресса, которая не является логической.

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

Итак, ниже приведено решение,

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

    int progressStep = getMax() / dotsCount;

    int lastDotProgress = Math.round(getProgress() / progressStep) * progressStep;
    int nextDotProgress = lastDotProgress + progressStep;
    int midBetweenDots = lastDotProgress + (progressStep / 2);

    if (getProgress() > midBetweenDots)
        seekBar.setProgress(nextDotProgress);
    else
        seekBar.setProgress(lastDotProgress);
}

Вы можете использовать то же поведение в onProgressChanged(), если хотите предотвратить поиск между точками

Ответ 3

public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {   
 int s_size=5;
    progress = ((int)Math.round(progress/s_size))*s_size;
    seekBar.setProgress(progress);
    textview.setText(progress + "");
}

то, что вы хотите настроить, легко получить от прогресса и Значение textview.settext()