我的应用程序中有一个 android.support.v4.view.ViewPager
,我想区分以编程方式启动的平滑滚动和用户启动的触摸滚动。
我查看了 ViewPager.OnPageChangeListener
,我相信答案可能就在其中,但我不确定如何。
最佳答案
好的,事实证明我对 ViewPager.onPageChangeListener
中的答案是正确的。特别是它在于使用onPageScrollStateChanged(int state)
。 ViewPager
中的页面基本上可以处于三种状态:
- Dragging:表示分页器当前正在被用户拖动。
- 空闲:表示寻呼机处于空闲、稳定状态。
- 稳定:表示寻呼机正在稳定到最终位置。
所以拖动状态只有在当前页面被用户物理拖动时才会出现。因此,当用户滑动页面时,状态按以下顺序发生:拖动 -> 稳定 -> 空闲。现在,onPageSelected(int position)
方法在“Settling”和“Idle”状态之间被调用。因此,为了确定页面更改是否是由用户滚动引起的,只需要检查之前的状态是“拖动”并且当前状态是“稳定”。然后,您可以保留一个 boolean
变量来跟踪页面更改是否是用户发起的,并在 onPageSelected(int position)
方法中检查它。
这是我的 onPageScrollStateChanged
方法
public void onPageScrollStateChanged(int state)
{
if (previousState == ViewPager.SCROLL_STATE_DRAGGING
&& state == ViewPager.SCROLL_STATE_SETTLING)
userScrollChange = true;
else if (previousState == ViewPager.SCROLL_STATE_SETTLING
&& state == ViewPager.SCROLL_STATE_IDLE)
userScrollChange = false;
previousState = state;
}
if
和 else if
语句不必如此明确,但为了清楚起见,我这样做了。
关于android - 区分 ViewPager 中的用户滚动和程序化页面更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819970/