如何提高ViewFlipper/ViewAnimator的性能

6

我正在使用一个ViewAnimatorViewFlipper的父类)来制作一种交互式书籍。层次结构大致如下:

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

所以书的页面在ViewAnimator中。每一页都有一个FrameLayout,其中包含多个层级的动画ImageView、TextView、Button等,这些内容太多了。通过viewAnimator.showNext()显示书的新页面可能需要数秒钟。所有的时间都花费在ImageView.onDraw() -Traceview上。
-是否有任何布局替代方案可以改善ViewAnimator(如ViewPager、其他ViewGroup的实现……)?
-是否有任何方法可以预加载ViewFlipper/ViewAnimator/其他将要显示的视图?(这样,下一页总是准备好并在内存中)
-应该使用Canvas还是GLSurfaceView?(不能使用动画框架)
我卡住了……你能帮忙吗?

我正在尝试使用ViewFlipper来模仿Windows Phone中全景控件的行为,但存在相同的问题(视图切换缓慢)。如何改善ViewFlipper的视图切换? - anonim
我想补充一点,如果你想要跳转到特定的视图,而不是使用 showNext,你可以使用我在这里创建的东西:https://dev59.com/tGgu5IYBdhLWcg3wkH2P#55102182。 - android developer
2个回答

5
为了提高ViewFlipper的性能,您可以在xml中设置

android:measureAllChildren="false"

这个通常对于FrameLayout是false,但是ViewAnimator却默认启用。将其设置为false解决了一个奇怪的延迟问题。

非常正确。感谢你的启发。 - Adeyinka Adediji

3

我不能回答所有你的问题,但是我会告诉你我所知道的,因为这总比没有其他答案要好。

ViewPagers默认情况下加载视图两侧的视图。这加快了切换速度,但可能会减慢当前打开的视图。可以使用其中一种方法设置预加载视图的数量。

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

除地图覆盖层之外,我对画布或GL没有经验,但我认为如果正确实现,它们可能会更快/响应更快/更有效,因为您不需要任何不需要的功能。根据您内容的来源,可能会有点混乱。

建议: 尝试ViewPager,它适用于像您这样的实现。如果您对此不满意,请手动检查画布相关内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接