Добавьте плавную анимацию между двумя последовательными точками прогресса на панели поиска - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь плавно анимировать панель поиска при настройке прогресса, скажем, от 1 до 2.

Я пытался настроить анимацию, используя ObjectAnimator с интерполятором, но он перемещается только через точки прогресса.Установка максимального значения панели поиска на высокое значение для более плавной прокрутки не является вариантом.

Я нашел версию setProgress - setProgress (int progress, boolean animate) , которая анимируетПанель поиска, как мне хотелось бы, между последовательными точками прогресса.

Но невозможно установить длительность или настроить анимацию, как это сделает ObjectAnimator.

Какие-либо решения о том, как добиться результата, где я могу настроить свойства такой анимации?

1 Ответ

0 голосов
/ 30 декабря 2018

Решение состоит в том, чтобы установить максимальное значение 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();
}

Теперь пользователь может выбрать только несколько значений, и анимация все еще может бытьсделано гладкоНадеюсь, это поможет вам.

...