2012-10-01 107 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

以我的经验记忆使用可以影响动画的表现。 因此,如果您可以减少应用程序的内存占用量,则可能会产生积极影响。一个简单的方法就是减少所用图像的文件大小。