2015-07-20 80 views
0

我的问题是因为糟糕的设计最有可能的,但无论如何:变量的变化onAnimationEnd运行之前

我有也有不少ImageViews(地形块)的ArrayList。 然后,我反复以编程方式创建ImageViews,然后将其动画设置为名为moveLeft的动画,该动画仅使ImageView左移10秒。

在动画结束之后,我需要将ImageView的可见性设置为GONE,因为到那时它将不在屏幕上。 问题是我用int count来保存ImageView的总数。

moveLeft.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 

      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       terrainArray.get(count - 1).setVisibility(View.GONE); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
     }); 

我不断制造新的地形块,这意味着我的计数变量不断变化。

但是,onAnimationEnd不会像动画开始时那样以相同的计数值运行。因此,它最终将其块的可见性设置为GONE

这是因为onAnimationEnd实际上没有运行,直到创建块之后10秒,因为动画持续10秒。

因此,当我想设置其可见性时,由于正在运行动画时正创建更多块,所以我留下了错误的块编号。 (因此增加count的价值)

是否有某种方式,我可以存储count'的方法onAnimationStart 的当前值,然后传递相同值onAnimationEnd方法? (并使其适用于无限数量的地形块?此外,只有一个听众,并且多个块可能同时结束动画。)

回答

0

这很简单。如果您确定需要onAnimationStart()count的确切值,请在匿名类中创建一个变量。将计数值保存在onAnimationStart()中并用于onAnimationEnd()

您可以复制以下代码片段。

moveLeft.setAnimationListener(new Animation.AnimationListener() { 

     private int mCount = 0; 

     @Override 
     public void onAnimationStart(Animation animation) { 
      mCount = count; 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      terrainArray.get(mCount - 1).setVisibility(View.GONE); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    }); 

希望这有助于。但是,恐怕会有更大的设计问题。小心老板:)