@Override public boolean isBottom() { if (Build.VERSION.SDK_INT >= 14) { return !canScrollVertically(1); } else { return getScrollY() + getHeight() >= computeVerticalScrollRange(); } }
@Override public void goTop() { scrollView.goTop(); } }
@Override public void goTop() { scrollTo(0, 0); } }
@Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: downX = ev.getX(); downY = ev.getY(); //如果滑动到了最底部,就允许继续向上滑动加载下一页,否者不允许 getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: float dx = ev.getX() - downX; float dy = ev.getY() - downY; boolean allowParentTouchEvent; if (Math.abs(dy) > Math.abs(dx)) { if (dy > 0) { //位于顶部时下拉,让父View消费事件 allowParentTouchEvent = isTop(); } else { //位于底部时上拉,让父View消费事件 allowParentTouchEvent = isBottom(); } } else { //水平方向滑动 allowParentTouchEvent = true; } getParent().requestDisallowInterceptTouchEvent(!allowParentTouchEvent); } return super.dispatchTouchEvent(ev); }
@SuppressLint("NewApi") @Override public boolean isTop() { if (Build.VERSION.SDK_INT >= 14) { return !canScrollVertically(-1); } else { return getScrollY() <= 0; } }