sli*_*ull 6 performance android android-widget android-layout
我使用的是ViewAnimator(父类的ViewFlipper)做出某种互动的书.层次结构大致如下:
<ViewAnimator>
<include layout="@layout/p0" />
<include layout="@layout/p1" />
<include layout="@layout/p2" />
...
</ViewAnimator>
Run Code Online (Sandbox Code Playgroud)
所以这本书的页面都在ViewAnimator里面.每个页面都有一个FrameLayout,其中有多层动画ImageViews,TextViews,Buttons ......结果太多了.通过viewAnimator.showNext()显示书籍的新页面可能需要几秒钟.所有这些时间都花在了ImageView.onDraw()-Traceview上.
- ViewAnimator的任何替代布局(ViewPager,ViewGroup的其他实现......)会改进吗?
- 有没有办法预加载 ViewFlipper/ViewAnimator /其他将显示的视图?(这样书的下一页总是准备好并且在记忆中很开心)
- 我应该使用Canvas还是GLSurfaceView?(不能使用动画框架)
我被困了......你能帮忙吗?
要提高 ViewFlipper 的性能,您可以设置
机器人:measureAllChildren =“假”
在 xml 中。对于 FrameLayout,这通常设置为 false,但 ViewAnimator 由于某种原因默认启用它。
将它设置为 false 为我解决了一个非常奇怪的滞后问题。
我无法回答你所有的问题,但我会告诉你我所知道的,因为这比缺乏其他答案要好。:P
ViewPagers 默认加载两侧的视图。这会加快切换速度,但可能会减慢当前打开的视图的速度。viewpager 上预加载视图的数量可以使用其方法之一进行设置。
如果您不需要 ViewPager,您可以尝试实际实例化您想要自己预加载的视图,然后将它们设置为不可见。
除了地图叠加之外,我对画布或 GL 没有经验,但我希望如果正确实施,它们可能会更快/响应更快/效率更高,因为您不会有任何不需要的功能。但可能会很混乱,具体取决于内容的来源。
建议:尝试 ViewPager,它是为像您这样的实现而设计的。如果您对此不满意,请卷起袖子并检查画布材料。