2012-09-27 43 views
3

是否有可能以這種方式覆蓋Android的LayoutAnimationController只有在ViewGroup內指定的某個子項View纔會生成動畫?我的目標是根據Activity的當前狀態選擇一組任意的子視圖,並在同一時間用相同的動畫爲它們製作動畫,然後在以後選擇一組不同的任意子視圖並執行相同操作事情。我希望能夠不斷地做到這一點,直到Activity完成運行。佈局動畫控制器可以只動畫指定的視圖

到目前爲止,我已經看過,並駁回幾個選項:

  1. 調用startAnimation(Animation)兒童的具體意見 獨立,但沒有一個保證,他們將所有 開始和結束在完全相同的時間,特別是如果任意集合中的 視圖的數量很大。
  2. 覆蓋LayoutAnimationController.getAnimationForView()好像是 就像它是最簡單的方法,但該方法是最終的,並且不能覆蓋 。

我一直在這個問題上摸不着頭腦,想通了Stack Overflow。

回答

6

我找不到方法來改變Android的LayoutAnimationController,但確實想出了一個簡單的解決方案,做我想做的。我創建了一個View子類,如果我願意,可以選擇性地忽略調用來運行動畫。

public class AnimationAverseView extends View { 

    private boolean mIsAnimatable = true; 

    public void setAnimatible(boolean isAnimatable) { 
     if (!isAnimatable) { 
      clearAnimation(); 
     } 
     mIsAnimatable = isAnimatable; 
    } 

    @Override 
    public void startAnimation(Animation animation) { 
     if (mIsAnimatable) { 
      super.startAnimation(animation); 
     } 
    } 
} 

我不擔心任何其他可能與動畫相關的方法,因爲我只能通過LayoutAnimationController動畫View秒。

+0

嘿,這個解決方案不工作....請幫助我,我已經設置了幾個孩子的mIsAnimatable,但仍然都是動畫 –

+0

您是否嘗試使用除LayoutAnimationController以外的任何其他動畫這些視圖?還有其他動畫相關的方法可以在視圖上調用,而不是由上面的代碼處理。 – happydude

+0

如果您不希望受影響的視圖從xml中膨脹,並位於諸如RelativeLayout之類的viewGroup中,則可以改爲創建AnimationAverseRelativeLayout並在佈局中使用該視圖。這幫助我進入了一個listView設置,在那裏我需要一些單元格進行動畫製作,而另一些則不進行動畫製作。 – havchr

0

我無法對接受的答案添加評論,因此在此添加一些附加信息。 happydude(2月17日)的評論對我來說也是正確的。我有一個FrameLayout作爲我的ListView標題的最外層視圖,並且我需要覆蓋setAnimation()方法以防止標題與列表的其餘部分一起動畫。所以你應該看看你可能需要重寫的其他動畫方法。