简体   繁体   English

迁移到 viewpager2 不加载所有上一页和下一页边界视图以及 viewpager2 中 getPageWidth() 的等效方法是什么

[英]Migrating to viewpager2 not loading all previous and next page boundaries view and what is the equivalent method to getPageWidth() in viewpager2

I m migrating Viewpager to Viewpager2, after loading view using Viewpager2 showing only one item first from the list , list has 8- 9 items and if i scroll able to see 2nd item coming and siting in first item gets overlapping.我正在将 Viewpager 迁移到 Viewpager2,在使用 Viewpager2 加载视图后,首先只显示列表中的一个项目,列表有 8-9 个项目,如果我滚动能够看到第二个项目,并且第一个项目中的选址会重叠。

Can any one help how to fix above issue in Viewpager2, I need all items to be displayed when loading and when i scroll horizontally without overlapping.任何人都可以帮助如何解决 Viewpager2 中的上述问题,我需要在加载和水平滚动而不重叠时显示所有项目。

In view pager we use to use getPageWidth() code for ViewPager with previous and next page boundaries view in one screen.在视图分页器中,我们使用 getPageWidth() 代码为 ViewPager 在一个屏幕中查看上一页和下一页边界视图。 and now in Viewpager2 hat is the equivalent method for having same effect Any help is appreciated!现在在 Viewpager2 hat 是具有相同效果的等效方法 任何帮助表示赞赏!

There are two ways we can choose any one from below:我们有两种方式可以从以下任意一种中选择:

solution1 - MarginPageTransformer introduced to provide an ability to create space between pages (outside of page inset).解决方案 1 - 引入 MarginPageTransformer 以提供在页面之间(页面插图之外)创建空间的能力。

        mBinding.viewPager.setPageTransformer(new MarginPageTransformer(30));

solution2 - custom setPageTrarnsformer解决方案 2 - 自定义 setPageTransformer

        float pageMargin = getResources().getDimensionPixelOffset(R.dimen.pageMargin);
        float pageOffset = getResources().getDimensionPixelOffset(R.dimen.offset);

        mBinding.viewPager.setPageTransformer((page, position) -> {
            Log.d(TAG,"position: "+position + " pageOffset: "+ pageOffset + " pageMargin:"+ pageMargin);
            float myOffset = position * -(2 * pageOffset + pageMargin);
            Log.d(TAG,"myOffset: "+myOffset);
            if (mBinding.viewPager.getOrientation() == ViewPager2.ORIENTATION_HORIZONTAL) {
                if (ViewCompat.getLayoutDirection(mBinding.viewPager) == ViewCompat.LAYOUT_DIRECTION_RTL) {
                    page.setTranslationX(-myOffset);
                } else {
                    page.setTranslationX(myOffset);
                }
            } else {
                page.setTranslationY(myOffset);
            }
        });

dimens.xml
 <dimen name="pageMargin">30dp</dimen>
    <dimen name="offset">40dp</dimen>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM