Несколько ViewPropertyAnimators

Надеюсь, я не дублирую вопрос здесь; Я не мог найти один о нескольких ViewPropertyAnimators, Цель состоит в том, чтобы оживить вид от y1 до y2 за 8 секунд. Исчезают в первую секунду, а затем исчезают в последнюю секунду.

Вот что я попробовал в своей деятельности onCreate():

final View animatingView = findViewById(R.id.animateMe);


    animatingView.post(new Runnable() {
        @Override
        public void run() {
            //Translation
            animatingView.setY(0);
            animatingView.animate().translationY(800).setDuration(8000);

            //Fading view in
            animatingView.setAlpha(0f);
            animatingView.animate().alpha(1f).setDuration(1000);

            //Waiting 6 seconds and then fading the view back out
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    animatingView.animate().alpha(0f).setDuration(1000);
                }
            }, 6000);
        }
    });

Тем не менее, результатом является перевод от 0 до 800 и альфа от 0 до 1 всего за одну секунду. а затем через 6 секунд вид исчезает. Он выглядит каждый раз, когда я вызываю View.animate(), он возвращает один и тот же ViewPropertyAnimator. Есть ли способ, которым я могу иметь несколько из них? Я думал об анимации альфы представления, вложении представления в относительную компоновку, а затем анимации перевода относительных компоновок. Я бы предпочел не идти по этому пути, если мне не нужно. Кто-нибудь знает лучшее решение?

1 ответ

Решение

Вы можете решить это с помощью ObjectAnimator экземпляры напрямую, а не с помощью .animate() абстракция.

ObjectAnimator translationY = ObjectAnimator.ofFloat(animatingView, "translationY", 0f, 800f);
translationY.setDuration(8000);

ObjectAnimator alpha1 = ObjectAnimator.ofFloat(animatingView, "alpha", 0f, 1f);
alpha1.setDuration(1000);

ObjectAnimator alpha2 = ObjectAnimator.ofFloat(animatingView, "alpha", 1f, 0f);
alpha2.setDuration(1000);
alpha2.setStartDelay(7000);

AnimatorSet set = new AnimatorSet();
set.playTogether(translationY, alpha1, alpha2);
set.start();
Другие вопросы по тегам