Перекрестная анимация в RecyclerView с двумя TextViews - PullRequest
0 голосов
/ 22 сентября 2019

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

Как 1000 мс, показывая TextViewOne -> 500 мс для перехода к TextViewTwo -> 1000 мс, показывая TextViewTwo -> 500 мс для перехода к TextViewOne -> 1000 мс, показывая TextViewOne -> и так далее ... Может кто-нибудь помочь мне с некоторыми указателями на это?Заранее спасибо.

1 Ответ

0 голосов
/ 26 сентября 2019

При изучении нескольких статей я нашел решение этой проблемы.ниже приведен фрагмент кода.

/**
 * Setup crossfade animation on the views
 *
 * @param firstView  First view
 * @param secondView Second view
 */
private void setAnimations(@NonNull View firstView, @NonNull View secondView) {
        int crossFadeDuration = 500;
        int holdDuration = 1000;

        ObjectAnimator fadeOutFirstView = ObjectAnimator.ofFloat(firstView, View.ALPHA, 1f, 0f);
        fadeOutFirstView.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                firstView.setVisibility(View.GONE);
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        fadeOutFirstView.setInterpolator(new LinearInterpolator());

        ObjectAnimator fadeOutSecondView = ObjectAnimator.ofFloat(secondView, View.ALPHA, 1f, 0f);
        fadeOutSecondView.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                secondView.setVisibility(View.GONE);
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        fadeOutSecondView.setInterpolator(new LinearInterpolator());

        ObjectAnimator fadeInFirstView = ObjectAnimator.ofFloat(firstView, View.ALPHA, 0f, 1f);
        fadeInFirstView.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                firstView.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        fadeInFirstView.setInterpolator(new LinearInterpolator());

        ObjectAnimator fadeInSecondView = ObjectAnimator.ofFloat(secondView, View.ALPHA, 0f, 1f);
        fadeInSecondView.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                secondView.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        fadeInSecondView.setInterpolator(new LinearInterpolator());

        AnimatorSet mAnimationSetForward = new AnimatorSet();
        mAnimationSetForward.setDuration(crossFadeDuration);
        mAnimationSetForward.playTogether(fadeOutFirstView, fadeInSecondView);

        AnimatorSet mAnimationSetReverse = new AnimatorSet();
        mAnimationSetReverse.setDuration(crossFadeDuration);
        mAnimationSetReverse.playTogether(fadeOutSecondView, fadeInFirstView);

        mAnimationSetForward.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                mAnimationSetReverse.setStartDelay(holdDuration);
                mAnimationSetReverse.start();
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });


        mAnimationSetReverse.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                mAnimationSetForward.setStartDelay(holdDuration);
                mAnimationSetForward.start();
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        mAnimationSetForward.start();
}
...