我有一个简单的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正确报告位置,而不管我从哪个方向滑动?有没有更可靠的方法来检测到这一点?谢谢!