【问题标题】:Android ViewPager adapter - force getPageWidth every timeAndroid ViewPager 适配器 - 每次强制 getPageWidth
【发布时间】:2018-04-15 22:44:18
【问题描述】:

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

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();

【问题讨论】:

  • 任何帮助将不胜感激!

标签: android android-viewpager


【解决方案1】:

一种简单的方法是使用 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上查看完整的使用文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多