仅需自定义scrollView即可实现。
@Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); mT = t; Log.i(TAG, "onScrollChanged: t:" + t + "-----oldt:" + oldt + "----getHeight-" + getHeight()); if (t < oldt && isDown) { if (mT < getHeight() - 1) { smoothScrollToPrePage(); } } }
@Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (!isDown) { if (mT > getHeight() / 8) { smoothScrollToNextPage(); } else { smoothScrollToPrePage(); } } return true; } return super.onTouchEvent(ev); }
private boolean isDown = false; private void smoothScrollToNextPage() { smoothScrollTo(0, 10000); Log.i(TAG, "smoothScrollToNextPage: getY" + getY() + "---getHeight" + getHeight() + "---getHeight" + getHeight()); isDown = true; } private void smoothScrollToPrePage() { smoothScrollTo(0, 0); Log.i(TAG, "smoothScrollToPrePage: getY" + getY() + "---getHeight" + getHeight() + "---getHeight" + getHeight()); isDown = false; } @Override public boolean onInterceptTouchEvent(MotionEvent e) { int action = e.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downY = (int) e.getRawY(); break; case MotionEvent.ACTION_MOVE: int moveY = (int) e.getRawY(); if (isDown) { if (Math.abs(moveY - downY) < mTouchSlop) { return false; } } else { if (Math.abs(moveY - downY) > mTouchSlop) { return true; } } } return super.onInterceptTouchEvent(e); }