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()