带有边距和页面转换器的片段内的 ViewPager 无法正确呈现
Posted
技术标签:
【中文标题】带有边距和页面转换器的片段内的 ViewPager 无法正确呈现【英文标题】:ViewPager inside Fragment with margins and page transformer not rendering correctly 【发布时间】:2014-06-19 16:28:11 【问题描述】:我有一个viewpager,里面有片段。
我使用类似于例如的代码
ViewPager margin in PageTransformer transformations
和填充,以便您可以在当前查看的片段的任一侧看到片段的淡出边缘。
但问题是当viewpager第一次启动时,两边的fragment并没有淡出和缩小。
即我的 ZoomOutPageTransformer 的 transformPage 方法在您开始滑动之前不会被调用,因此最初的页面右/左或视图看起来错误的地方,然后在完成滑动后“跳转”到向右看。
我如何使其正确渲染的任何想法,例如如果我打电话
myViewPager.setCurrentItem(1) - 或其他任何东西,两侧的页面将被适当地缩小。
如何在将 zoomoutpagetransformer 应用于“屏幕外”片段的情况下让 viewpager 在创建时正确呈现?
【问题讨论】:
您找到解决方案了吗? 【参考方案1】:基本上,当您在视图寻呼机上使用填充和边距时,PageTransformer 的 transformPage() 方法会返回错误的位置。 似乎是here 所述的框架错误。 解决方法解释说对我不起作用。
所以我想出了另一个解决方案,只要您将数据放在其关联的适配器上,就会在视图寻呼机上假装拖拽。
private void invalidatePageTransformer(final ViewPager pager)
new Handler().post(new Runnable()
@Override
public void run()
//no need to invalidate if we have no adapter or no items
if (pager.getAdapter() != null && pager.getAdapter().getCount() > 0)
//import check here, only fakeDrag if "beginFakeDrag()" returns true
if (pager.beginFakeDrag())
pager.fakeDragBy(0f);
pager.endFakeDrag();
);
【讨论】:
对我来说有效!我用物品填充我的适配器,然后我打电话给viewPager.post(() -> ...fakeDrag)
【参考方案2】:
我知道我来不及回答,但我遇到了同样的问题,但没有找到任何答案。所以对于遇到同样问题的人来说,这里有一些东西:
所以基本上页面转换器在第一次加载时不会正确调用下一个项目,尽管它在第一次滚动时运行良好。
所以我写了几行来稍微滚动页面并将其取回,从而为我们提供所需的视图:
viewPager.scrollBy(5,0);
viewPager.scrollBy(-5,0);
【讨论】:
尝试增加滚动量【参考方案3】:我遇到了类似的问题,并通过添加解决了它:
// ... your ViewPager setup code here
myViewPager.setPageMargin(1);
【讨论】:
【参考方案4】:我尝试调整 ViewPager 的填充,然后我发现 45dp 会让 ViewPager 中的项目正确显示。
<android.support.v4.view.ViewPager
...
android:paddingTop="45dp"
...
/>
【讨论】:
以上是关于带有边距和页面转换器的片段内的 ViewPager 无法正确呈现的主要内容,如果未能解决你的问题,请参考以下文章