Ответ 1
Построил мой собственный контроль. Работа выполнена:) Код здесь
Я пытаюсь сделать движение SeekBar более плавным, чем просто прыгать прямо на позицию. Я делаю это, так как у меня есть SeekBar с 3 вариантами для реализации ползунка.
Я ищу создать приятный гладкий слайдер с 3 вариантами "Да", "Нет опции", "Нет" для функции в моем приложении, а SeekBar выглядит наилучшим и простым способом.
Я пробовал смотреть на Android Animation, и это кажется немного сложным, поэтому, если кто-нибудь может помочь, это будет хорошо:)
Построил мой собственный контроль. Работа выполнена:) Код здесь
Я нашел следующее решение, чтобы сделать движение поиска плавным, но все же привязано к ограниченному диапазону значений. Предполагая, что в вашем макете есть следующие виды:
<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" />
Вы можете использовать следующий код в своей деятельности (измените значение android: max в приведенном выше xml и коэффициент гладкости в приведенном ниже коде в соответствии с вашими потребностями - более высокие значения = более плавное):
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);
}
}
}
Вам не нужно ничего строить самостоятельно, просто пользовательская анимация для Android, это сделает для вас что-то особенное.
Код написан в kotlion
mySeekbar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
//Todo: code
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
if (seekBar.progress > 70) {
ObjectAnimator.ofInt(seekBar, "progress", 100).setDuration(100).start()
} else if (seekBar.progress < 30) {
ObjectAnimator.ofInt(seekBar, "progress", 0).setDuration(100).start()
} else {
ObjectAnimator.ofInt(seekBar, "progress", 50).setDuration(100).start()
}
}
})