[英]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.