【问题标题】:Android - Animation in series on the same buttonAndroid - 在同一个按钮上串联动画
【发布时间】:2011-12-18 19:27:36
【问题描述】:

我有一个带有几个按钮的简单应用程序。 在某些时候,动画会成功地按顺序应用于这些按钮。 但是,在所有动画按钮都是唯一的情况下(IE 按钮 1、2、3)一切正常。

另一方面,如果要设置动画的按钮是重复的(IE 1、1、2、3、2),那么即使 i 使用不同时间的 animation.SetStatOffset,相同按钮的动画也会同时开始(以秒为单位)。

public void Flash(int delay,int time) {
    Animation animation=AnimationUtils.loadAnimation(this.getContext(),R.anim.gametextbuttonrotation);
    animation.setStartOffset(delay);
    animation.setDuration(time);
    this.startAnimation(animation);
}

被调用

private void Flash(List<Integer> sequence)
{
    int i=0;
    int COOLDOWN=1000;
    for (Integer integer : sequence) {
        buttons[integer].Flash(i++*COOLDOWN,COOLDOWN/2);    
    }

}

我试图阅读 cod/google 但没有任何帮助。

好的,如果有人尝试这样做,解决方案如下:

1) 在View Class中创建AnimationSet的局部变量 2)开始一个新序列时,使用构造函数初始化AnimationSet(AFAIK没有AnimationSet.empty()之类的东西..... 3)在foreach循环中,创建动画然后播放它们

private void flash(List<Integer> sequence)
{
    int i=0;
    int COOLDOWN=1000;
    for(Button button : buttons)
    {
       button.clearAnimation(); 
       button.animSet=new AnimationSet(); //is inside a private method, here All-in-1 to be simple
    }



    for (Integer integer : sequence) {
        buttons[integer].addFlash(i++*COOLDOWN,COOLDOWN/2); 
    }

    for (Integer integer : sequence) {
        buttons[integer].flash();   
    }
}

【问题讨论】:

  • 好的,这很奇怪,但在发布后我得到了一个关联:D 我首先想到的是,startAnimation(...) 正在将动画添加到允许超过 1 个的按钮,但它似乎重写了他们.... 解决方法:在类AnimationSet中加入animSet; . . .动画动画=AnimationUtils.loadAnimation(this.getContext(),R.anim.gametextbuttonrotation);动画.setStartOffset(延迟);动画.setDuration(时间); animSet.addAnimation(动画); this.startAnimation(animSet);
  • 我也给你写了一个很好的解释:-)

标签: android animation sequence


【解决方案1】:

考虑一下。如果您在视图上设置两个动画,则第二个将覆盖第一个。因此,动画“不是同时开始”只有第二个(有延迟)正在运行。您无法判断它们在动画相同的同时运行,也许您应该切换动画以进一步测试您的错误:

 // XXX Debug code remember to remove
 boolean toggle = true;
 public void Flash(int delay,int time) {
         int animId = toggle ? R.anim.gametextbuttonrotation : R.anim.another_animation;
         toggle = !toggle;    

         Animation animation = AnimationUtils.loadAnimation(this.getContext(), animId); 
         .....
 }

在这种情况下,每一秒的动画都会不同。

如果您想在一个视图上运行两个动画,您应该考虑使用动画集。 http://developer.android.com/guide/topics/graphics/view-animation.html

另一方面,没有另一种显示动画的方式:

     public void flash(int delay,int time) {
         Animation animation = AnimationUtils.loadAnimation(this.getContext(),R.anim.gametextbuttonrotation); 
         animation.setDuration(time);
         animation.setStartTime(delay);             
         this.setAnimation(animation);
     }

附: Java naming conventions 建议您的方法名称以小写字母开头。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 2015-12-14
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多