当提供的视图是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();
}
答案 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();