PageChangeListener不一致的逻辑取决于方向

时间:2018-09-09 16:53:20

标签: android

我有一个简单的TabLayout和ViewPager,并且有4个标签。我遇到了这个奇怪的问题:

我要:知道用户向哪个方向滑动,以便知道要淡入或淡出的选项卡图标。基本上我想做的就是找出方向。

我注意到 onPageChangeListener 是一个非常奇怪的问题:

    viewPager.addOnPageChangeListener(
            new ViewPager.OnPageChangeListener()
            {
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
                {
                     Log.d( "positiontest", position + "\t\t" + positionOffset + "\t\t" + positionOffsetPixels );
                }

                public void onPageScrollStateChanged( int state ) {}

                public void onPageSelected(int position) {}
            }
    );

让我们说我在TAB2(位置1)上

-如果我开始向左滑动,则该位置报告为0(但我们仍位于位置1)。

position: 0     0.99408865      1009
position: 0     0.98817736      1003
position: 0     0.982266        997

-如果我开始向右滑动,则该位置报告为1(我们仍位于位置1)。应该将位置报告为2,以与左滑动逻辑保持一致。

position: 1     0.0019704103    1
position: 1     0.00394094      4
position: 1     0.0049260855    4

最后,如果我们向左滑动,onPageScrolled将报告滚动到的“下一个”选项卡作为位置,但是如果我们向右滑动,onPageScrolled将报告与“滚动”相同的选项卡我们正在进入。

我不明白为什么逻辑上会不一致?因此,我无法检测到用户是否向右滑动,只能检测到向左滑动(因为向右滑动时,开始滑动时位置不会改变)。

如果它向右滑动的方式与向左滑动的方式相同,那么我可以轻松完成此操作,我不知道这是错误还是正常行为?

我想尝试依靠positionOffset,如果向右滑动,则ether返回0.1、0.2、0.3;向左滑动,则返回0.9、0.8、0.7等。但是,如果用户单击选项卡,这些值将变为刷卡速度非常快。

是否有可能使onPageChangeListener正确报告位置,而不管我从哪个方向滑动?有没有更可靠的方法来检测到这一点?谢谢!

0 个答案:

没有答案