// viewpager滑动状态判断,true滑动了,false没有滑动
private boolean isScrolling = false;
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
//state 1开始滑动 2滑动结束 0什么都没做 滑动过程1-2-0
if (state == 1) {
isScrolling = false;
}
if (state == 2) {
isScrolling = true;
}
if (state == 0) {
if (!isScrolling) { // 没有滑动,说明滑到底了
if (currentPosition == detailsData.size() - 1) {
// 最后一页,加载下一项数据
loadNextItemData();
} else if (currentPosition == 0) {
// 第一页
loadLastItemData();
}
}
}
}
});
这是我第一次的写法,其实如果数据大于一条时(detailsData.size()>1),这样是没问题的,但是当数据只有一条时,这样就不行,就要判断滑动方向了。
// viewpager滑动状态判断,true滑动了,false没有滑动
private boolean isScrolling = false;
private float downX; // 按下时x坐标
private boolean isLeft = false; // 是否往左滑
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = ev.getX();
break;
case MotionEvent.ACTION_UP:
if (ev.getX() - downX > 0) {
// 往右滑动,查看上一页
isLeft = false;
} else {
// 往左滑动,查看下一页
isLeft = true;
}
break;
}
return super.dispatchTouchEvent(ev);
}
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
//state 1开始滑动 2滑动结束 0什么都没做 滑动过程1-2-0
if (state == 1) {
isScrolling = false;
}
if (state == 2) {
isScrolling = true;
}
if (state == 0) {
if (!isScrolling) { // 没有滑动,说明滑到底了
if (isLeft) {
// 左滑,查看下一页
} else {
// 右滑,查看上一页
}
}
}
}
});
这是现在的写法,加了左右滑动的判断