如何提高ViewFlipper / ViewAnimator的性能

时间:2011-09-07 17:56:32

标签: android performance android-layout android-widget

我正在使用 ViewAnimator ViewFlipper 的父类)制作某种互动图书。 层次结构大致如下:

<ViewAnimator>
  <include layout="@layout/p0" />
  <include layout="@layout/p1" />
  <include layout="@layout/p2" />
  ...
</ViewAnimator>

所以这本书的页面都在ViewAnimator里面。每个页面都有一个FrameLayout,其中有多层动画ImageViews,TextViews,Buttons ......结果太多了。通过viewAnimator.showNext()显示书籍的新页面可能需要几秒钟。所有这些时间都花在ImageView.onDraw()-Traceview上。

- ViewAnimator的任何布局替代(ViewPager,ViewGroup的其他实现......)会改进吗?

- 有没有办法预加载视图 ViewFlipper / ViewAnimator /其他将会显示下一个? (这样书的下一页总是准备好并且在记忆中很开心)

- 我应该使用Canvas还是GLSurfaceView? (不能使用动画框架)

我被困了......你能帮忙吗?

2 个答案:

答案 0 :(得分:4)

要提高ViewFlipper的性能,您可以设置

  

机器人:measureAllChildren = “假”

在xml中。对于FrameLayout,这通常设置为false,但ViewAnimator由于某种原因默认启用它。

将其设置为false为我解决了一个非常奇怪的滞后问题。

答案 1 :(得分:3)

我无法回答你所有的问题,但我会告诉你我所知道的,因为它比缺乏其他答案更好。 :P

默认情况下,ViewPagers会在任意一侧加载视图。这会加快交换机的速度,但可能会降低当前打开的视图的速度。可以使用其中一种方法设置viewpager上预加载视图的数量。

如果您不想使用ViewPager,您可以尝试实际实例化您想要自己预加载的视图,并简单地将它们设置为不可见。

除了地图叠加之外,我对画布或GL没有经验,但我希望如果正确实施,它们可以更快/更快/更高效,因为你没有任何不需要的功能。可能会很麻烦,具体取决于您的内容来源。

建议: 试试ViewPager,它就像你的实现一样。如果你对它不满意,请卷起袖子并检查帆布的东西。