ValueAnimator使用Button但不能使用LinearLayout

时间:2019-07-18 08:33:32

标签: android

当提供的视图是Button时,以下代码正常工作,而当它是LinearLayout时,则什么也没有发生(背景颜色不变)。

如果我在没有ValueAnimator的情况下在LinearLayout上手动设置颜色,它将起作用。我也尝试使用ObjectAnimator,但结果看起来很糟糕。

一个示例调用:

playBlinkAnimation(view, activity.getResources().getColor(R.color.transparent), activity.getResources().getColor(R.color.colorRed), 5000);


view.getBackground().setColorFilter(activity.getResources().getColor(R.color.colorRed), PorterDuff.Mode.DARKEN);


private void playBlinkAnimation(final View view, int colorFrom, int colorTo, int duration) {

        ValueAnimator colorAnimation = new ValueAnimator();
        colorAnimation.setIntValues(colorFrom, colorTo);
        colorAnimation.setEvaluator(new ArgbEvaluator());


        colorAnimation.setDuration(duration);
        colorAnimation.setRepeatCount(ValueAnimator.INFINITE);
        colorAnimation.setRepeatMode(ValueAnimator.REVERSE);

        colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animator) {
                view.getBackground().setColorFilter((int) animator.getAnimatedValue(), PorterDuff.Mode.DARKEN);
            }

        });

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

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                view.getBackground().setColorFilter(null);
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                view.getBackground().setColorFilter(null);
                view.setAlpha(1);
                view.getBackground().setColorFilter(null);
            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        colorAnimation.start();
    }

2 个答案:

答案 0 :(得分:1)

您可以尝试使用AnimatorSet及其playTogether函数。它需要一组Animator,并且可以同时运行多个动画,但也应该只能使用一个动画。

希望对您有帮助!

答案 1 :(得分:1)

由于您似乎希望布局从透明背景转换为不透明红色,因此应为布局的alpha参数设置动画

ObjectAnimator animator = ObjectAnimator.ofInt(view, "alpha", 0, 1);
animator.setDuration(5000);
animator.setInterpolator(new LinearInterpolator());
animator.start();