我在ViewPager
中有一些标签。除最后一个标签之外的每个标签都会在右下角显示FloatingActionButton
。在滚动此选项卡时,最后一个选项卡应该在翻译后显示在底部中心。当滚动离开此选项卡时,FloatingActionButton
会转换回其右下角位置。我正在实施一个解决方案,并且惊讶地发现这或多或少都是这样的:
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// One page away from last page
if (position == mAdapter.getCount() - 2) {
mFab.setTranslationX(positionOffsetPixels / -2f);
}
}
}
当我滚动到最后一个标签时,我们将FAB翻译到其当前位置的左侧,因为传递给setTranslationX()
的参数是否定的。现在,这是我困惑的地方。当我向后滚动一页时,FAB会根据需要向右翻译 - 但这怎么可能呢? setTranslationX()
的论点仍然是否定的。我希望FAB能够进一步向前翻译。
答案 0 :(得分:1)
当您从位置mAdapter.getCount() - 2
向前滚动时,positionOffsetPixels
的值将增加正数,positionOffsetPixels / -2f
将增加负数,因此FAB将翻译在左边,正如预期的那样。
来自position
的{{3}}:
当前显示的第一个页面的位置索引。
这意味着当向后滚动时,偏移值将相对于您要滚动到的页面而不是您要滚动的页面。
当您从mAdapter.getCount() - 1
向后滚动时,position
的值为mAdapter.getCount() - 2
(这是您要滚动到的位置)和{的值{1}}将正数减少到0。
positionOffsetPixels
,因此最终会调用0 / -2f == 0
,将FAB返回原位。