Android ViewPager适配器 - 每次强制getPageWidth

时间:2015-06-11 12:08:41

标签: android android-viewpager

我在ViewPager中有两个片段,我的要求是第一次在第一个片段中显示第二个片段的某些部分,以便让用户知道还有一个页面。 一旦用户滑动到下一页并返回到第一页,第一个片段应该占据全屏(不仅仅是90%)。所以我保留了一面旗帜,以检查它是否是第一次,并返回右页宽度 -

public float getPageWidth(int position) {
    if (position == 0 && isPatiallyShowNextItem) {
        return 0.9f;
    }
    isPatiallyShowNextItem = false;
    return 1f;
}

问题是getPageWidth()只被调用一次,第一个片段总是只占据屏幕的90%,当用户滑动到下一个片段时,如何强制getPageWidth,或者让用户第一个片段占用100%的屏幕之后移到第二页。 仅供参考 - 我在更改旗帜后尝试过以下电话,但没有任何效果!

pagerAdapter.notifyDataSetChanged();
viewPager.requestLayout();
viewPager.invalidate();

1 个答案:

答案 0 :(得分:0)

一种简单的方法是使用ViewPager.PageTransformer。做这样的事情来实现90%的页面显示效果

public class PageRevealTransformer implements ViewPager.PageTransformer
{

    @Override
    public void transformPage(View page, float position)
    {
        int pageWidth = page.getWidth();
        if (position < -.9)
        {
            // TODO: do something when this condition is certisfied
        } else if (position <= .5)
        {
            float newPageWidth = pageWidth / 3;
            page.setTranslationX(newPageWidth * -(position));
        } else
        {
            // TODO: do something when this condition is certified
        }
    }
}

并适用于您的页面适配器

  

viewPager.setPageTransformer(true,new PageRevealTransformer());

了解你的逻辑,你很高兴。您还可以在http://developer.android.com/training/animation/screen-slide.html

上查看完整的使用文档