在ViewPager滚动上翻译FloatingActionButton时,对setTranslationX()感到困惑

时间:2016-08-13 09:38:13

标签: android android-viewpager floating-action-button

我在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能够进一步向前翻译。

1 个答案:

答案 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返回原位。