最近项目正在做自动轮播的banner效果,出现了几种意想不到的问题。 1:由于banner是放在recyclerview 中的head中,所有当滑动recyclerview 至banner到屏幕外再回来, 会发现,viewpager第一次切换pager 无动画效果,也就是翻页速度很快。 2:当从别的fragment页面中切换到有banner的fragment中的时候,也就是banner中的fragment由 isVisibleToUser=false 变成 isVisibleToUser=true时 会出现viewpager中两个pager卡着不动,过段时间才会恢复并且切换无动画
WTF!!! 细看 viewpager 源码中有个mFirstLayout 成员变量,当mFirstLayout=true时,是不走scrollToItem方法的, 所以会导致页面重新可见时,第一次切换是没有动画的!!!!!!!!!!!!!
继承viewpager 重写 onAttachedToWindow()方法,反射mFirstLayout 成员变量 修改值
@Override protected void onAttachedToWindow() { super.onAttachedToWindow(); /** * 设ViewPager中有3张照片 * 直到完全隐藏此ViewPager,并执行了onDetachedFromWindow * 再回来时,将会出现bug,第一次滑动时没有动画效果,并且,经常出现view没有加载的情况 */ try { Field mFirstLayout = ViewPager.class.getDeclaredField("mFirstLayout"); mFirstLayout.setAccessible(true); mFirstLayout.set(this, false); setCurrentItem(getCurrentItem()); } catch (Exception e) { e.printStackTrace(); } }