我正在尝试创建一个 Velocity View Pager,在其中我可以像画廊 View 一样滚动页面。我在进行滚动计算时遇到问题。我正在为 ViewPager 使用 FragmentStatePagerAdapter。对于正常的第一次运行,getScrollBy 返回第一个元素为 0 的实际滚动位置很酷。即,如果我在第 3 页,getScrollX 返回 2400(每页 800px)等等。
当我从后台堆栈恢复后获取托管 viewpager 的 fragment 时出现问题。这次我的第三页变成了 0,我的第一页变成了 -2400 位置。当 android 重新充气适配器时,它会如何将当前位置视为 0。我已经尝试了各种使用 setCurrentItem 的方法。有些我觉得computeScroll不起作用。
如果有人能建议我如何让 getScrollX 返回考虑开始为 0 而不是新膨胀的当前位置的位置,那就太好了。
否则我每次恢复时都没有选择创建一个新 fragment 。
最佳答案
您随时都知道当前位置,对吗?我会使用 ViewPager.getWidth()
将当前位置乘以 ViewPager 的宽度。由于 2400 以像素为单位,因此您可以使用 getWidth()
中的宽度(以像素为单位)来确定位置。
需要注意的一件事是确保在 View 膨胀和测量后使用 getWidth()
值,否则它将返回宽度为零。