首页 > 解决方案 > ValueAnimator 使用 Button 但不使用 LinearLayout

问题描述

以下代码在提供的视图是 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();
    }

标签: android

解决方案


您可以尝试使用 AnimatorSet 和它的 playTogether 功能。它需要一组 Animator,它旨在一起运行多个动画,但它也应该只与一个动画一起工作。

希望对你有帮助!


推荐阅读