diff --git a/ptr-lib/src/in/srain/cube/views/ptr/PtrFrameLayout.java b/ptr-lib/src/in/srain/cube/views/ptr/PtrFrameLayout.java index 93e761c..664326e 100755 --- a/ptr-lib/src/in/srain/cube/views/ptr/PtrFrameLayout.java +++ b/ptr-lib/src/in/srain/cube/views/ptr/PtrFrameLayout.java @@ -107,7 +107,8 @@ public PtrFrameLayout(Context context, AttributeSet attrs, int defStyle) { mScrollChecker = new ScrollChecker(); final ViewConfiguration conf = ViewConfiguration.get(getContext()); - mPagingTouchSlop = conf.getScaledTouchSlop() * 2; +// mPagingTouchSlop = conf.getScaledTouchSlop() * 2; + mPagingTouchSlop = (int) (conf.getScaledTouchSlop() * 1.f); } @Override @@ -264,7 +265,7 @@ private void layoutChildren() { public boolean dispatchTouchEventSupper(MotionEvent e) { return super.dispatchTouchEvent(e); } - + private boolean mIsBeingDragged = false; @Override public boolean dispatchTouchEvent(MotionEvent e) { if (!isEnabled() || mContent == null || mHeaderView == null) { @@ -274,6 +275,7 @@ public boolean dispatchTouchEvent(MotionEvent e) { switch (action) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: + mIsBeingDragged = false; mPtrIndicator.onRelease(); if (mPtrIndicator.hasLeftStartPosition()) { if (DEBUG) { @@ -290,6 +292,7 @@ public boolean dispatchTouchEvent(MotionEvent e) { } case MotionEvent.ACTION_DOWN: + mIsBeingDragged = false; mHasSendCancelEvent = false; mPtrIndicator.onPressDown(e.getX(), e.getY()); @@ -308,8 +311,8 @@ public boolean dispatchTouchEvent(MotionEvent e) { float offsetX = mPtrIndicator.getOffsetX(); float offsetY = mPtrIndicator.getOffsetY(); - if (mDisableWhenHorizontalMove && !mPreventForHorizontal && (Math.abs(offsetX) > mPagingTouchSlop && Math.abs(offsetX) > Math.abs(offsetY))) { - if (mPtrIndicator.isInStartPosition()) { + if (mDisableWhenHorizontalMove && !mPreventForHorizontal && (Math.abs(mPtrIndicator.getDistanceX()) > mPagingTouchSlop && Math.abs(offsetX) > Math.abs(offsetY))) { + if (Math.abs(mPtrIndicator.getDistanceY()) 0; + + mIsBeingDragged = mIsBeingDragged || Math.abs(mPtrIndicator.getDistanceY() )>mPagingTouchSlop; + boolean moveDown = offsetY>0; boolean moveUp = !moveDown; boolean canMoveUp = mPtrIndicator.hasLeftStartPosition(); @@ -331,7 +336,7 @@ public boolean dispatchTouchEvent(MotionEvent e) { return dispatchTouchEventSupper(e); } - if ((moveUp && canMoveUp) || moveDown) { + if (((moveUp && canMoveUp) || moveDown) && mIsBeingDragged) { movePos(offsetY); return true; } diff --git a/ptr-lib/src/in/srain/cube/views/ptr/indicator/PtrIndicator.java b/ptr-lib/src/in/srain/cube/views/ptr/indicator/PtrIndicator.java old mode 100644 new mode 100755 index 769b667..d499463 --- a/ptr-lib/src/in/srain/cube/views/ptr/indicator/PtrIndicator.java +++ b/ptr-lib/src/in/srain/cube/views/ptr/indicator/PtrIndicator.java @@ -7,6 +7,7 @@ public class PtrIndicator { public final static int POS_START = 0; protected int mOffsetToRefresh = 0; private PointF mPtLastMove = new PointF(); + private PointF mPtPressDownPoint = new PointF(); private float mOffsetX; private float mOffsetY; private int mCurrentPos = 0; @@ -71,6 +72,7 @@ public void onPressDown(float x, float y) { mIsUnderTouch = true; mPressedPos = mCurrentPos; mPtLastMove.set(x, y); + mPtPressDownPoint.set(x, y); } public final void onMove(float x, float y) { @@ -85,6 +87,14 @@ protected void setOffset(float x, float y) { mOffsetY = y; } + public float getDistanceX(){ + return mPtLastMove.x - mPtPressDownPoint.x; + } + + public float getDistanceY(){ + return mPtLastMove.y - mPtPressDownPoint.y; + } + public float getOffsetX() { return mOffsetX; }