繁体   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

我正在将 Viewpager 迁移到 Viewpager2,在使用 Viewpager2 加载视图后,首先只显示列表中的一个项目,列表有 8-9 个项目,如果我滚动能够看到第二个项目,并且第一个项目中的选址会重叠。

任何人都可以帮助如何解决 Viewpager2 中的上述问题,我需要在加载和水平滚动而不重叠时显示所有项目。

在视图分页器中,我们使用 getPageWidth() 代码为 ViewPager 在一个屏幕中查看上一页和下一页边界视图。 现在在 Viewpager2 hat 是具有相同效果的等效方法 任何帮助表示赞赏!

我们有两种方式可以从以下任意一种中选择:

解决方案 1 - 引入 MarginPageTransformer 以提供在页面之间(页面插图之外)创建空间的能力。

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

解决方案 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