带有边距和页面转换器的片段内的 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 无法正确呈现的主要内容,如果未能解决你的问题,请参考以下文章

检测片段内的 ViewPager 选项卡更改

检测片段内的 ViewPager 选项卡更改

带有嵌套片段的导航抽屉 (ViewPager)

如何在 viewPager 中使用按钮更改页面?

如何从Google表格下载具有特定边距和分页符的PDF文件?

Android ViewPager + 带有动态 ListViews 的片段