@Override public boolean onTouchEvent(MotionEvent e) { if (mRefreshEnable || mLoadMoreEnable) { switch (e.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: mDownMotionEventY = (int) e.getRawY(); break; case MotionEvent.ACTION_MOVE: mCurMotionEventY = (int) e.getRawY(); if (mLoadMoreEnable && mCurMotionEventY - mDownMotionEventY < -20) { mIsUpFlag = true; } if (mLoadMoreEnable && checkCanLoadMore()) { Log.e(TAG, "checkLoadMore"); showLoadMoreView(); } if (mRefreshEnable && checkCanRefresh()) { Log.d(TAG, "canRefresh"); mRefreshHeader.move( (mCurMotionEventY - mDownMotionEventY) / 2, mCurMotionEventY, mDownMotionEventY); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (mRefreshHeader != null && mRefreshHeader.getRefreshState() != REFRESH_STATE_REFRESHING) { mRefreshHeader.upOrCancel(mRefreshDataListener); } mIsUpFlag = false; break; } } return super.onTouchEvent(e); }