我有一个控制五Fragments的Fragments。当我从索引1处的Fragment滑动到索引0处的Fragment时,在动画中有一个短暂的停顿,我想消除它。
目前,我没有调用setOffscreenPageLimit(),所以我知道Fragment 0被ViewPager保存在内存中,而在Fragment 1上处于空闲状态,因为屏幕外页面限制默认为1(当前Fragment的任何一侧)。
这就是让人困惑的地方。如果我在我的ViewPager上调用ViewPager,在从1到0的滑动动画中的暂停就消失了--动画是平滑的。
因此,我得出的结论是,将Fragments 2-4保存在内存中可以将动画从Fragment 1提高到Fragment 0。
保留Fragments Fragment 2-4如何提高从Fragment 1到 Fragment 0的滑动动画?
编辑
我运行了TraceView,使用onPageScrollStateChanged(int state)来确定何时启动和停止跟踪,如下所示:
@Override
public void onPageScrollStateChanged(int state) {
if (state == 1 && mViewPager.getCurrentItem() == 1) {
Debug.startMethodTracing("ViewPagerTesting", 100000000);
}
if (state == 0 && mViewPager.getCurrentItem() == 0) {
Debug.stopMethodTracing();
}
}看来ViewPager的可访问性方法正在导致UI线程冻结。当我在ViewPager上调用setOffscreenPageLimit(4)时,这些可访问性方法在跟踪完成所需的时间很少。
是什么导致了延迟?

发布于 2014-01-24 08:15:18
当您使用setOffscreenPageLimit()的默认实现时,它只加载一个片段,该片段位于它的右侧。就像。当您在索引1上时,它的索引2加载在内存中,而不是索引0,所以左滑动将不得不从零开始生成一个新的片段。要测试这个理论,您可能需要使用setOffscreenPageLimit(2),然后尝试滑动索引1->0。这绝不是最优的解决方案,但将有助于消除您对这一概念的疑虑。
https://stackoverflow.com/questions/21322207
复制相似问题