Как по очереди анимировать Views

118
28 сентября 2019, 13:50

У меня на странице несколько View. Нужно чтобы каждый анимировался после предыдущей.

1) Думал для каждой анимации делать задержки, но мне кажется этот вариант не правильный.

2) У каждой анимации в Listener в методе onAnimationEnd(), вызываю след анимацию. Анимации беру из xml. В этом решении заметил то, что следующая анимация не сразу срабатывает. Да и у меня View 8-10 штук и для каждого реализовывать Listener, тоже как-то не чисто получается.

Здесь всего 3 вьюшки, а занимает столько места:

mLogo.startAnimation(zoomInAnim);
    zoomInAnim.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }
        @Override
        public void onAnimationEnd(Animation animation) {
            mPackage.setVisibility(View.VISIBLE);
            mPackageBack.setVisibility(View.VISIBLE);
            mPackage.startAnimation(slideUpAnim);
            mPackageBack.startAnimation(slideUpAnim);
            slideUpAnim.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                }
                @Override
                public void onAnimationEnd(Animation animation) {
                    mImage1.setVisibility(View.VISIBLE);
                    mImage1.startAnimation(slideUpBounceAnim);
                }
                @Override
                public void onAnimationRepeat(Animation animation) {
                }
            });
        }
        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });
}

Вопрос: Как вы комбинируете Views и очередь анимации, может есть другие решения, о котором я не знаю?

Answer 1

Может так?

Создаем массив View, к примеру TextView. В каждом, соответственно, имеется слово.

TextView arrayTextView[] = {tvW1, tvW2, tvW3, tvW4, tvW5, tvW6, tvW7, tvW8, tvW9, tvW10};

Пишем метод

private void animate(final TextView tv, int delta) {
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            //будем увеличивать размер букв
            tv.setTextSize(40f);
        }
    };
    handler.postDelayed(runnable, delta * 400);
}

Перебираем массив в цикле

for (int i = 0; i < arrayTextView.length; i++) {
    animate(arrayTextView[i], i);
}

Итого. Каждые 400 ms в очередном TextView шрифт становится крупнее.

READ ALSO
Использование RandomAccessFile, кодировки

Использование RandomAccessFile, кодировки

При чтении байтов из файла с использовании RandomAccessFile нормально выводится в консоль только латиницаЧтоб выводилась нормально кирилица необходимо...

138
Что такое double brace инициализация?

Что такое double brace инициализация?

Что означает синтаксис {{ }}(две двойных фигурных скобки) в Java?

142