如何提高ViewFlipper/ViewAnimator

问题描述:

的性能我使用的是ViewAnimator(父类的ViewFlipper)做出某种互动的书。 层次结构大致是这样的:如何提高ViewFlipper/ViewAnimator

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

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

-Will any Layout 替代ViewAnimator(ViewPager,ViewGroup的其他实现...)可以改善什么?

- 是否有任何方法预先加载视图一个ViewFlipper/ViewAnimator /其他将显示下一个? (以便本书的下一页总是准备好并且在内存中快乐)

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

我卡住了......你能帮忙吗?

+0

我试图用ViewFlipper模仿全景控制在Windows Phone的行为,并有同样的问题(慢视图翻转)。如何改进ViewFlipper视图切换? – anonim

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

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

如果你不想要一个ViewPager,你可以试着实例化你想要自己预装的视图,并简单地将它们设置为不可见。

我不是用帆布或GL除了地图叠加经历过,但我希望他们可以更快/响应/有效的,如果实施得当,因为你不会有任何不必要的功能。可能会很麻烦,取决于你的内容来源。

建议: 尝试ViewPager,它是为像你的实现而制作的。如果您不满意,请卷起袖子并检查画布。

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

的android:measureAllChildren在XML = “假”

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

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

+0

......非常真实。感谢您的大开眼界 –