我在我的应用程序中实现了一个ViewPager,除了滑动分页之外,我还有“Next”和“Back”按钮,其中有一个简单的onClick方法,唯一的一行是ViewPager的setCurrentItem。
虽然在滑动期间分页动画完全平滑,但当我单击“下一个”或“后退”时,它或多或少是瞬时的(只是翻转而不是滚动)。没有可见的“滚动”运动,或者有时几乎看不到,但是甚至不能接近平滑。它不会以任何方式损害应用程序的可用性,因为转换仍然会立即发生,但在视觉上它看起来不太吸引人,并且用户体验受到损害。
现在,我怀疑它与绘制下一个视图的应用程序有关,因此“跳过”动画。我的instantiateItem使用LayoutInflater和一个简单的switch语句来扩充每个视图(最多4个页面),我在switch语句中的每个case中加载自定义ListViews。自定义ListView最多有3个项目,每行有一个TextView和一个ImageView(ImageView资源的大小为5kb)。对我而言,似乎这些对象的数量不足以减慢分页动画的速度。
除此之外,我还在styles.xml中为我的应用程序分配了自定义背景,这是每个活动使用的背景(大小为160kb)。
这些是我认为可能会减慢应用程序的唯一因素,因为onClick方法只包含一行(setCurrentItem),所以除了转到下一个视图之外没有其他内容在app中发生,而instantiateItem是我所知道的最简单的方法实现。
我尝试过的事情:
将ViewPager的setOffScreenPageLimit设置为4,我认为这会预先加载视图并消除分页之间的任何加载,但最终将其设置为0似乎使事情稍微更容易显示一帧动画
通过使用convertView重用旧视图来优化自定义ListView,虽然它确实导致显示更多动画,但它仍然不是完全平滑的,从“近乎完美的动画”变为“即时翻转”
删除自定义背景,与上述两个修复程序一起导致一个几乎足够好的解决方案,但仍然每隔几步就会翻转。
上面描述的修补使我相信它与正在加载的视图有关,但是我没有找到一个很好的解决方案来预加载这些效果。 知道了我的新手编程技巧,我知道有一种确定的解决方法,而不是诉诸于应用程序本身的设计,但阅读文档,Stack Overflow问题,谷歌搜索建议,我刚刚用完了地方期待。
总结一下,我的主要问题可能是口头描述性的:
有没有办法确保ViewPager的动画顺利执行?也许一个单独的线程?据我所知,UI内容应该只在主线程上,它已经存在,除了视图加载之外没有别的东西在代码中的任何地方执行分页。
我应该使用不同的方式加载页面吗?片段有用吗?
感谢您的任何建议。
PS。缺少代码是由于所讨论的方法是最基本的实现,但我会在必要时提供代码。