Почему эта анимация не запускается при первой загрузке? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть экран, на котором одновременно отображаются анимированные номера макетов. Здесь анимация входа не запускается при первой загрузке, а запускается после повторного вызова метода.

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

public void setPosition(final int position, final boolean animate) {

    for (int x = 0; x < tabsContainer.getChildCount(); x++) {
        scheduledBookingContainer.getChildAt(x).setVisibility(x == position ? View.VISIBLE : View.GONE);
        timeContainer.getChildAt(x).setVisibility(x == position ? View.VISIBLE : View.GONE);
        tabsContainer.getChildAt(x).setVisibility(x == position ? View.VISIBLE : View.GONE);
        if (x == position) {
            final LinearLayout cardContainer = (LinearLayout) tabsContainer.getChildAt(x);
            scheduledBookingContainer.getChildAt(x).startAnimation(this.position > position ?
                    AnimationUtil.inFromLeftAnimation() : AnimationUtil.inFromRightAnimation());
            timeContainer.getChildAt(x).startAnimation(this.position > position ?
                    AnimationUtil.inFromLeftAnimation() : AnimationUtil.inFromRightAnimation());
            if (animate) {
                animationRunnable = new Runnable() {
                    @Override
                    public void run() {
                        animateCardsIn(cardContainer);
                    }
                };
                new Handler().postDelayed(animationRunnable, 500);
            } else {
                showCards(cardContainer);
            }
        } else if (x == this.position) {
            LinearLayout currentCardContainer = (LinearLayout) tabsContainer.getChildAt(this.position);
            currentCardContainer.setVisibility(View.VISIBLE);
            Animation animation = loadAnimation(getContext(), R.anim.shrink_out);
            animateCardsOut(currentCardContainer, animation, (LinearLayout) tabsContainer.getChildAt(position));
            currentCardContainer.startAnimation(this.position > position ?
                    AnimationUtil.outToRightAnimation() : AnimationUtil.outToLeftAnimation());
            scheduledBookingContainer.getChildAt(x).startAnimation(this.position > position ?
                    AnimationUtil.outToRightAnimation() : AnimationUtil.outToLeftAnimation());
            timeContainer.getChildAt(x).startAnimation(this.position > position ?
                    AnimationUtil.outToRightAnimation() : AnimationUtil.outToLeftAnimation());
        }
    }
    this.position = position;
}

И этот метод не запускается при первой загрузке.

private void animateCardsIn(final LinearLayout childContainer) {
    int delayMillis = 0;
    for (int y = 0; y < childContainer.getChildCount(); y++) {
        final int finalY = y;
        ViewGroup child = (ViewGroup) childContainer.getChildAt(y);
        ViewGroup subChild = (ViewGroup) child.getChildAt(0);
        if (subChild != null) {
            if (subChild.getChildCount() > 0) {
                animationRunnable = new Runnable() {
                    @Override
                    public void run() {
                        Animation animation = loadAnimation(getContext(), R.anim.slide_in_top_right);
                        childContainer.setVisibility(View.VISIBLE);
                        childContainer.getChildAt(finalY).setVisibility(View.VISIBLE);
                        childContainer.getChildAt(finalY).startAnimation(animation);
                    }
                };
                new Handler().postDelayed(animationRunnable, delayMillis);
                delayMillis = delayMillis + 100;
            }
        }
    }
}
...