我想创建一个在我的视图中连续运行的变色背景动画,并且我已经能够使用此代码创建变色动画。
int prevColor = getRandomColor();
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), prevColor, getRandomColor(prevColor));
colorAnimation.setRepeatCount(ValueAnimator.INFINITE);
colorAnimation.setDuration(transitionTime); // milliseconds
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
backgroundBase.setBackgroundColor((int) animator.getAnimatedValue());
}
});
colorAnimation.start();
运行顺利,但......
当动画结束时,它突然变回第一次没有软动画的第一次变色
然后,我想做的是当动画结束时,我希望动画从我的颜色列表中获取新的随机颜色,以便颜色不时变化(不仅仅是来回反转) )
我在setAnimationListener
中找不到colorAnimation
,因此我无法使用覆盖方法onAnimationEnd
我该怎么做才能实现这一目标?
答案 0 :(得分:1)
由于Adrian Coman
我不使用ValueAnimator.ofObject(new ArgbEvaluator(), prevColor, getRandomColor(prevColor));
来初始化colorAnimation
,而是使用默认构造函数。并使用setIntValues
更改onAnimationRepeat
int defaultBackground = getRandomColor();
final ValueAnimator colorAnimation = new ValueAnimator();
colorAnimation.setIntValues(defaultBackground, getRandomColor(defaultBackground));
colorAnimation.setEvaluator(new ArgbEvaluator());
colorAnimation.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
int backgroundColor = ((ColorDrawable) backgroundBase.getBackground()).getColor();
int nextColor = getRandomColor(backgroundColor);
colorAnimation.setIntValues(backgroundColor, nextColor);
colorAnimation.start();
}
});
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
backgroundBase.setBackgroundColor((int) animator.getAnimatedValue());
}
});
colorAnimation.setDuration(transitionTime); // milliseconds
colorAnimation.setRepeatCount(ValueAnimator.INFINITE);
colorAnimation.start();
它每隔2秒(我的过渡时间)无限地改变背景颜色值。但我仍然不知道为什么我需要colorAnimation.start();
onAnimationRepeat
我试图删除它,但背景颜色随闪烁动画而变化,而不是像第一次动画时那样柔和变换颜色动画。
答案 1 :(得分:0)
将fillAfter设置为true:
colorAnimation.setFillAfter(true);
您可以使用addListener:
colorAnimation.addListener(new Animation.AnimatorListener(){....})
答案 2 :(得分:0)
这是因为您正在更改初始动画的颜色...如果您使用视图的当前颜色开始动画,它可能会起作用。
试试这个:
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), backgroundBase.getBackgroundColor,
getRandomColor(backgroundBase.getBackgroundColor));
colorAnimation.setRepeatCount(ValueAnimator.INFINITE);
colorAnimation.setDuration(transitionTime); // milliseconds
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
backgroundBase.setBackgroundColor((int) animator.getAnimatedValue());
}
});
colorAnimation.start();