2016-04-08 25 views
0

我正在創建一個運行視圖的淡入動畫的自定義視圖。 (在這種情況下,在異步設置圖像後,圖像會淡入 - 而不是立即彈出視圖,但這個問題一般是針對動畫人員的。)AnimatorInflater.loadAnimator足夠便宜,可以經常使用,還是應該緩存?

在Android Developer指南Property Animation中,建議加載和運行代碼所示的動畫:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, 
    R.anim.property_animator); 
set.setTarget(myObject); 
set.start(); 

但是文檔沒有建議在哪裏具體調用。

對於查看通貨膨脹(佈局),強烈建議儘可能避免通貨膨脹,因爲這是一種相對昂貴的通話方式。

在視圖本身內使用AnimatorInflater.loadAnimator()是否安全,即使活動中有多個該視圖的實例?換句話說,是否Animator XML加載足夠便宜,足以根據需要膨脹,還是應該將其緩存並設置爲活動級別而不是更方便且相關的視圖級別?

(注:我不談論較舊的Android 2.X Animation系統,但新款Android 3.1+ Animator系統)。

回答

1

如果您有不同的看法運行單獨的動畫,你會需要AnimatorSet的不同實例來控制它們。這意味着你必須單獨誇大它們,就像你必須誇大不同的觀點。

您也可以編程方式創建AnimatorSet對象,這可能會節省一點時間,但我不會嘗試優化,直到您看到性能問題。

0

是的,根據需要使用是安全的。

As @ doug-stevenson指出,每個正在運行的動畫都需要一個動畫師。因此,每個活動都不能緩存一個虛增的實例,因爲每個動畫師只能定位一個視圖。

通貨膨脹是昂貴的,但Android框架預計這一點,loadAnimator()的(當前)實施使用稱爲ConfigurationBoundResourceCache的內部類。只要用戶不更改配置(屏幕旋轉,連接設備等),您可以根據需要多次撥打loadAnimator(),併爲您創建緩存充氣版本中新的,易於克隆的實例。 (即使用戶確實更改了配置,只需要在每次配置更改時重新充氣一次。)

很明顯,您不應該通過一次動畫數百個視圖來濫用呼叫,因爲它是克隆新的每次調用都會對象,然後最終必須運行您開始的每個動畫。所以有一個實際的限制。但感到安全的是,當您需要在同一屏幕上設置合理數量的視圖時,您不會傷害性能,請致電loadAnimator()

相關問題