Решение состоит в том, чтобы установить максимальное значение ProgressBar очень высоким.Чтобы гарантировать, что пользователь все еще может выбирать значения только большими шагами, установите onSeekBarChangeListener и округлите входное значение и установите это значение как прогресс.
Скажем, у вас есть ProgressBar, где пользователь может выбирать от 0 до 10В начале выбрано 2.
seekBar = findViewById(R.id.seekBar);
seekBar.setMax(10*100);
seekBar.setProgress(2*100);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
//if the progress change is triggered by the user, update progress to closest value
if (fromUser) {
seekBar.setProgress(Math.round((float)progress / 100) * 100);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Затем запустите анимацию с помощью ObjectAnimator:
public void animateSeekbar(int toProgress) {
ObjectAnimator animation = ObjectAnimator.ofInt(seekBar, "progress", toProgress*100);
animation.setDuration(1000);
animation.start();
}
Теперь пользователь может выбрать только несколько значений, и анимация все еще может бытьсделано гладкоНадеюсь, это поможет вам.