网格上有几个按钮。我需要这个按钮是动画。动画很简单,我只想让这个按钮改变颜色并返回原来的颜色,就像“西蒙游戏”一样。 所以,我的问题是下一个: 我一直在尝试使用AnimatorSet。我为按钮创建了自己的类:
class Button{
ObjectAnimator anim;
public Button button;
public int colorA;
public int colorB;
public Button(){};
};
我有:
private Boton[] buttons;
buttons = new Boton[numButtons];
for(int i=0; i<numButtons; i++)
buttons[i] = new Boton();
后:
for(int i=0; i<numButtons; i++){
buttons[i].animacion=ObjectAnimator.ofFloat(buttons[i], "alpha", 1f, 1f);
buttons[i].animacion.setStartDelay(1000);
buttons[i].animacion.setDuration(2000);
buttons[i].animacion.addListener(new miAnimador(i));
}
另外,我定义了自己的Listener:
class miAnimador implements Animator.AnimatorListener{
int numBoton;
public miAnimador(int num){
numBoton=num;
}
public void onAnimationCancel(Animator paramAnonymousAnimator) {
}
@Override
public void onAnimationEnd(Animator animator) {
buttons[numBoton].button.setBackgroundColor(buttons[numBoton].colorA);
}
@Override
public void onAnimationRepeat(Animator animator) {
}
@Override
public void onAnimationStart(Animator animator) {
buttons[numBoton].button.setBackgroundColor(buttons[numBoton].colorB);
}
};
这对我来说非常强大,因为我可以使用按钮矢量并在需要时启动动画。
我可以做到这一点:使用我想要的动画序列构建一个动画集。
AnimatorSet s = new AnimatorSet();
final List<Animator>listaAnimaciones = new ArrayList<Animator>();
final List<Animator>AnimationsSequence = new ArrayList<Animator>();
AnimationsSequence.add(buttons[0].anim);
AnimationsSequence.add(buttons[1].anim);
//Add list
s.playSequentially(AnimationSequence);
s.setStartDelay(5000);
//Start animation
s.start();
嗯,这很好用,我喜欢AnimatorSet工作的形式,但是当我尝试两次相同的按钮动画时会出现问题。 例外情况是:“AnimatorSet中不存在循环依赖”,我不明白为什么会这样。
尽管如此,我需要做到这一点,我认为这是最好的解决方案,但是: 如果这不起作用,怎么能得到这个?
我接受任何想法。
如果你认为这是一个糟糕的解决方案,请我知道你的意见。