【问题标题】:Show multiple pages at a time while ViewPager is scrollingViewPager 滚动时一次显示多个页面
【发布时间】:2018-04-14 03:15:34
【问题描述】:

我正在使用ViewPager 控件。我在每一页都有一张图片和许多textviews。我使用左右填充以及page margin 在显示所选页面时部分显示下一页和上一页。

ViewPagerscrolling 时,我想一次显示多个页面。一旦滚动停止,希望仅在中心显示所选页面并部分显示前一页和后一页(就像滚动开始之前一样)。

我试图通过在ViewPagerscrolling 时增加“左”和“右”填充并在滚动停止时重置padding 来实现这一点。增加填充效果很好,我可以一次看到多个页面。但是将填充重置为原始值不起作用。填充重置为原始值后,ViewPager 显示意外对齐

我也尝试设置负边距。仍在重置边距未按预期工作

这是ViewPager 的定义

<android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:paddingTop="20dp"
        android:clipToPadding="false"
        android:paddingLeft="30dp"
        android:paddingRight="30dp"
        android:layout_width="wrap_content"
        android:layout_height="160dp"/>

viewPager.setPageMargin(CAROUSEL_PAGE_MARGIN);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                        if(getContext() != null) {

                            int paddingLeft = (int) getResources().getDimension(R.dimen.abstract_30dp);
                            int paddingRight = (int) getResources().getDimension(R.dimen.abstract_30dp);

                            int paddingTop = (int) getResources().getDimension(R.dimen.abstract_20dp);
                            int paddingBottom = 0;

                            viewPager.setPaddingRelative(paddingLeft, paddingTop, paddingRight, paddingBottom);
                        }

                }

                @Override
                public void onPageScrollStateChanged(int state) {
                    if (state == ViewPager.SCROLL_STATE_DRAGGING) {
                            if (getContext() != null) {

                                int paddingLeft = (int) getResources().getDimension(R.dimen.abstract_100dp);
                                int paddingRight = (int) getResources().getDimension(R.dimen.abstract_100dp);

                                int paddingTop = (int) getResources().getDimension(R.dimen.abstract_20dp);
                                int paddingBottom = 0;

                                viewPager.setPaddingRelative(paddingLeft, paddingTop, paddingRight, paddingBottom);
                            }

                        }

                        if (state == ViewPager.SCROLL_STATE_IDLE) {
                            if (getContext() != null) {

                                int paddingLeft = (int) getResources().getDimension(R.dimen.abstract_30dp);
                                int paddingRight = (int) getResources().getDimension(R.dimen.abstract_30dp);

                                int paddingTop = (int) getResources().getDimension(R.dimen.abstract_20dp);
                                int paddingBottom = 0;

                                viewPager.setPaddingRelative(paddingLeft, paddingTop, paddingRight, paddingBottom);
                            }

                        }
                    }
                }
            });

这是我需要的,

【问题讨论】:

  • 您能否向我们展示您想要实现的目标的参考图片?
  • 如果我没听错,你可以看看this
  • 您可以在滚动时使用动画缩小 viewPager 内的所有片段。 developer.android.com/training/animation/…
  • @nimi0112 感谢您的回复。我只是添加参考图像。请检查

标签: android android-viewpager


【解决方案1】:

当你的问题得到解决时,你这个代码 sn-p & upvote :)

        mViewPager.setClipChildren(false);
        mViewPager.setClipToPadding(false);
        int margin = (int) getResources().getDimension(R.dimen.d_margin_large);//16dp
        final int padding = (int) getResources().getDimension(R.dimen.d_margin_ex_large);//18dp
        mViewPager.setPageMargin(margin);
        mViewPager.setPadding(padding * 2, 0, padding * 2, 0);
        mViewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override public void transformPage(View page, float position) {
                if (mViewPager.getCurrentItem() == 0) {
                    page.setTranslationX(-(padding));
                } else if (mViewPager.getCurrentItem() == mViewPagerAdapter.getCount() - 1) {
                    page.setTranslationX(padding);
                } else {
                    page.setTranslationX(0);
                }
            }
        });

【讨论】:

  • 感谢您的建议!不幸的是,它不是我要找的。我刚刚添加了我正在尝试实现的图像。请你检查一下。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多