Znalazłem następujące rozwiązanie, aby pasek wyszukiwania poruszał się płynnie, ale nadal przyciągał do ograniczonego zakresu wartości. Zakładając, że masz następujące widoki w układzie:
<SeekBar
android:id="@+id/sldProgress"
style="@style/MySliderStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50" />
<TextView
android:id="@+id/lblProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5" />
Można użyć następującego kodu w swojej działalności (zmiana wartości android: max w powyższym XML, a współczynnik gładkości w kodzie poniżej według Państwa potrzeby - wyższe wartości = gładsze):
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sliderListener sldListener = new sliderListener();
SeekBar sldProgress = (SeekBar) findViewById(R.id.sldProgress);
sldProgress.setOnSeekBarChangeListener(sldListener);
}
private class sliderListener implements OnSeekBarChangeListener {
private int smoothnessFactor = 10;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress = Math.round(progress/smoothnessFactor);
TextView lblProgress = (TextView) findViewById(R.id.lblProgress);
lblProgress.setText(String.valueOf(progress));
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
seekBar.setProgress(Math.round((seekBar.getProgress() + (smoothnessFactor/2))/smoothnessFactor) * smoothnessFactor);
}
}
}
+1 Możesz dodać kod źródłowy, aby pomóc odwiedzającym w przyszłości. –
Będę, opublikuję go, jak tylko wypchnę ostatnią wersję mojej aplikacji. Myślę, że open source aplikacji i tak –
Zgodnie z obietnicą - https://github.com/kennydude/Speaker/blob/master/src/me/kennydude/speaker/SmoothSeekBar.java ta lokalizacja zostanie zaktualizowana jako aktualizacje kodu –