2012-10-01 106 views
1

我正在開發一款遊戲,其中我使用了一個計時器任務,該任務需要持續運行以更新GUI。在這裏,如果我嘗試同時執行2個動畫,它們不能順利運行,並且動畫看起來非常波濤洶涌。Android動畫不平滑

例如,即使我執行一個框架動畫,並且在其運行時,我嘗試滾動一個列表,但它不會按需滾動。我嘗試在runOnUiThread中運行一些動畫,但沒有運氣。

我也注意到了一件事。使用image.setVisibility(View.GONE)或image.setVisibility(View.VISIBLE)會中斷動畫流。

請爲此問題提出解決方案或替代方案。同時執行多個動畫會導致android中出現問題嗎?

回答

0

如果您只在模擬器上進行過測試,也許您可​​以先嚐試使用真實設備。我相信衆所周知,仿真器並不是像真實設備那樣呈現動畫效果最好的。

3

你的目標API是什麼?你可以打開hardware acceleration嗎?

<application android:hardwareAccelerated="true" ...> 
+0

嘿OceanLife,我一直在測試真實設備上的動畫,並且我正瞄準Android 2.3設備。我想Android 3.0支持硬件加速,這可能無法幫助我的其他設備。 – Hades

+0

在這種情況下,我會回頭讓您的View-Controller代碼儘可能高效地回收視圖。也許其他地方的效率低下表現爲慢動畫,因爲這不是路線的原因。您還可以使用DDMS工具分析您的代碼,並確定哪些代碼的運行效率低下。另一個放棄是如果你看到GC(垃圾收集)在你的應用程序運行時不斷記錄。現在每隔一段時間都很好,但快速連續的GC會提示併發垃圾收集器(它是最近發佈的Android中的併發)正在陷入困境。 – OceanLife

+0

這並將任何I/O,計算和繁重工作移入AsyncTasks ... – OceanLife

0

我認爲你不能指望4.0版之前的Android版本(冰淇淋三明治)流體動畫。 嘗試在以後的Android版本上運行它們,你會發現巨大的差異。

0

回答是有點晚了,但最近我有同樣的問題,並想出一個辦法來解決這個問題,所以對於那些有興趣...

顯然,如果你的觀點是動過別人,那些被強制被重新繪製。防止過多重繪的一種方法是平整視圖層次結構。

但是,當您一次有幾個動畫時,這可能還不夠。在這種情況下,如果您對啓用了硬件加速的設備進行編程,可以在幫助(例如調用View.setLayerType(View.LAYER_TYPE_SOFTWARE, null))上重新繪製已重繪視圖(例如背景視圖)的視圖。我不知道爲什麼,但它很好地平滑了動畫。也許是因爲GPU不具備處理所有重繪的功能。

0

以我的經驗記憶使用可以影響動畫的表現。 因此,如果您可以減少應用程序的內存佔用量,則可能會產生積極影響。一個簡單的方法就是減少所用圖像的文件大小。