【问题标题】:Crossfade Animation in RecyclerView with two TextViews带有两个 TextView 的 RecyclerView 中的交叉淡入淡出动画
【发布时间】:2019-09-22 13:50:58
【问题描述】:

我正在尝试在 RecyclerView 项目中实现交叉淡入淡出动画。有两个文本视图将通过淡入淡出动画依次显示。

比如 1000 毫秒显示 TextViewOne -> 500 毫秒交叉淡入淡出到 TextViewTwo -> 1000 毫秒显示 TextViewTwo -> 500 毫秒交叉淡入到 TextViewOne -> 1000 毫秒显示 TextViewOne -> 等等... 有人可以帮助我对此提出一些建议吗?提前致谢。

【问题讨论】:

    标签: android animation android-recyclerview textview cross-fade


    【解决方案1】:

    在浏览多篇文章时,我找到了解决方案。下面是代码sn-p。

    /**
     * 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多