2015-07-20 136 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) { 

     } 
    }); 

希望這有助於。但是,恐怕會有更大的設計問題。小心老闆:)