本文旨在分享“ 如何准确实现ViewPager第一页向前和最后一页向后滑动监听 ”。
方法总比问题多!
【本文只是其中的一种方案,期待其他方案的分享!感谢拍砖、建议和支持!】
一、思路解析
ViewPager的滑动状态有三种:
1)SCROLL_STATE_DRAGGING——Indicates that the pager is currently being dragged by the user.
【注】正在被用户拖拽滑动状态
2)SCROLL_STATE_SETTLING——Indicates that the pager is in the process of settling to a final position.
【注】被用户拖动并松手后,ViewPager自动滑动,即将归于停止的状态
3)SCROLL_STATE_IDLE——Indicates that the pager is in an idle, settled state.
【注】被用户滑动后的最终静止状态
以上三种状态,当滑动ViewPager的时候,如果处于第一页,继续向前滑动的时候不会产生SCROLL_STATE_SETTLING状态,但是如果向下一页方向滑动,则必然会产生SCROLL_STATE_SETTLING状态;如果处于最后一页,继续往后滑动,不会产生SCROLL_STATE_SETTLING状态,但是往前一页滑动,也必然会产生SCROLL_STATE_SETTLING状态。
所以,可以将SCROLL_STATE_SETTLING这个状态作为监听的flag!
二、Code Show【本文此处仅摘取关键代码】
private boolean mIsScrolled ; // viewpager是否处于惯性滑动
@Override
public void onPageScrollStateChanged (int state) { // 发生滑动状态改变时回调
switch (state) {
case ViewPager.SCROLL_STATE_DRAGGING:
mIsScrolled = false;
break;
case ViewPager.SCROLL_STATE_SETTLING:
mIsScrolled = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
if ( ! mIsScrolled ) {
// TODO 你想要实现的操作
}
mIsScrolled = true;
break;
}
}