Fragment中的ViewPager,边距和页面转换器无法正确呈现

时间:2014-05-02 21:43:58

标签: android animation android-viewpager fragment

我有一个包含碎片的viewpager。

我使用类似于例如的代码。

ViewPager margin in PageTransformer transformations

和填充,这样您就可以看到当前正在查看的片段两侧的片段的淡出边缘。

但问题是,当viewpager首次启动时,两侧的碎片都不会褪色并缩小。

即。我的ZoomOutPageTransformer的transformPage方法在您开始滑动之前不会被调用,因此初始页面右侧/左侧或视图看起来错误的地方,然后跳转'滑动完成后向右看。

任何想法如何使其正确呈现,例如如果我打电话

myViewPager.setCurrentItem(1) - 或其他任何内容,两侧的页面都会被适当缩小。

如何通过应用于'关闭屏幕的缩小页面变换器来使viewpager正确渲染oncreate?片段

4 个答案:

答案 0 :(得分:2)

基本上,当您在视图寻呼机上使用填充和边距时,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();
                }
            }
        }
    });

}

答案 1 :(得分:1)

我知道我来不及回答,但我遇到了同样的问题,但没有找到任何答案。所以对于任何面临同样问题的人来说,这里有一些东西:

所以基本上第一次加载时,页面转换器没有为下一个项目正确调用,尽管它在第一次滚动时效果很好。

所以我写了几行来滚动页面然后把它拿回来,它给我们提供了所需的视图:

 viewPager.scrollBy(5,0);
 viewPager.scrollBy(-5,0);

答案 2 :(得分:0)

我遇到了类似的问题并通过添加:

解决了这个问题
// ... your ViewPager setup code here
myViewPager.setPageMargin(1);

答案 3 :(得分:0)

我已经尝试调整ViewPager的填充,然后我发现45dp会让ViewPager内部的项目正确结束。

<android.support.v4.view.ViewPager
        ...
        android:paddingTop="45dp"
        ...
        />