我有一个控制五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
复制相似问题