背景:使用ViewPager控件完成滑动切换功能。

    问题:在编写的PageTransformer类中的transformPage方法,获得的position值不对。在静止状态时,主view的position不等于0,是略大于0的数。

    原因:在ViewPager源码中的onPageScrolled方法,看到计算position的方法如下:

    1. final float transformPos = (float) (child.getLeft() - scrollX) / getClientWidth();

    这里分子上少减去了左侧padding,导致计算的position偏大。

    解决方案:

    在transformPage方法中对position进行如下调整:

    1. ViewPager viewPager = (ViewPager) page.getParent();
    2. position -= (float) viewPager.getPaddingLeft() /
    3. (viewPager.getMeasuredWidth() - viewPager.getPaddingLeft() -viewPager.getPaddingRight());