平滑的animation为重型布局

我的应用程序使用标准的android TranslateAnimation将视图滑入和滑出屏幕。 不幸的是,布局看起来相当沉重:ImageView,一堆文本视图和一个包含文本和图像的图库。 有两个观点是animation的 – 一个滑出,另一个滑入。

问题在于这些animation的性能低下,尤其是在CPUfunction较弱的设备上。 animation看起来不够光滑。

我正在考虑删除TranslateAnimations,并试图捕获位图中的视图内容,并将其作为ImageViews移动。

你有什么想法如何正确地完成这些任务,如果图像移动的方法将有所帮助?

PS

我认为我可能会以错误的方式使用animation。 我有两个关于FrameLayout的观点。 一个是可见的,另一个不是。 然后,当用户沿着屏幕移动手指时,我处理触摸事件,并将TranslateAnimations应用于两个视图(在ACTION_MOVE上)。 所以看起来用户将一个视图移出屏幕,同时从屏幕侧面拉另一个视图。 它适用于轻量级布局。

Solutions Collecting From Web of "平滑的animation为重型布局"

您应该在animation视图上启用绘图caching。 查看View.setDrawingCacheEnabled(boolean)的文档。

另一个解决scheme是将视图渲染到三维表面上,并通过OpenGL对这些视图进行animation处理。 这就是索尼如何在他们的TimeScape应用程序中看到他们所有漂亮的animation。

有一个关于它的博客文章 。

你必须尝试使用​​视图鳍状肢。 它很简单,包括你的意见,并使用animation文件执行大量的animation。 此链接可能有帮助:

用于animation的viewFlipper

最后,我设法实现了使用自定义画廊视图所需的行为。 现在正在完善。

当你对触摸事件做出反应时,你可能会在你的onTouch方法中实例化新的TranslateAnimations,这很经常被触发。 大量创build新的实例会导致大量垃圾收集。

2解决scheme:

  1. 实现你自己的StaticTranslateAnimation并避免在每个移动事件上实例化它(例如setTranslation(int x,int y))。 下行:这种方法只适用于单个animation。 虽然在事件处理过程中没有对象被实例化(在我的代码中),但是一次animation化两个对象导致垃圾回收。

  2. 使用offsetLeftAndRight(int offset)和offsetTopAndBottom(int offset)而不是animation在旧的和Android 2.x设备上执行得更好,并且完全避免垃圾回收。