diff --git a/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIContinuousNestedTopAreaBehavior.java b/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIContinuousNestedTopAreaBehavior.java index 219c7939..25b165a9 100644 --- a/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIContinuousNestedTopAreaBehavior.java +++ b/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIContinuousNestedTopAreaBehavior.java @@ -48,6 +48,7 @@ public class QMUIContinuousNestedTopAreaBehavior extends QMUIViewOffsetBehavior< private Callback mCallback; private boolean isInTouch = false; private boolean isInFlingOrScroll = false; + private boolean replaceCancelActionWithMoveActionForWebView = true; public QMUIContinuousNestedTopAreaBehavior(Context context) { this(context, null); @@ -59,6 +60,10 @@ public class QMUIContinuousNestedTopAreaBehavior extends QMUIViewOffsetBehavior< mViewFlinger = new ViewFlinger(context); } + public void setReplaceCancelActionWithMoveActionForWebView(boolean replaceCancelActionWithMoveActionForWebView) { + this.replaceCancelActionWithMoveActionForWebView = replaceCancelActionWithMoveActionForWebView; + } + public void setCallback(Callback callback) { mCallback = callback; } @@ -117,7 +122,11 @@ public class QMUIContinuousNestedTopAreaBehavior extends QMUIViewOffsetBehavior< // dispatch cancel event not work in webView sometimes. MotionEvent cancelEvent = MotionEvent.obtain(ev); cancelEvent.offsetLocation(-child.getLeft(), -child.getTop()); - cancelEvent.setAction(MotionEvent.ACTION_MOVE); + if(replaceCancelActionWithMoveActionForWebView){ + cancelEvent.setAction(MotionEvent.ACTION_MOVE); + }else{ + cancelEvent.setAction(MotionEvent.ACTION_CANCEL); + } child.dispatchTouchEvent(cancelEvent); cancelEvent.recycle(); } diff --git a/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIDraggableScrollBar.java b/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIDraggableScrollBar.java index 117ee046..8e47c718 100644 --- a/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIDraggableScrollBar.java +++ b/qmui/src/main/java/com/qmuiteam/qmui/nestedScroll/QMUIDraggableScrollBar.java @@ -39,15 +39,15 @@ import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; -import com.qmuiteam.qmui.R; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.util.QMUILangHelper; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; +import com.qmuiteam.qmui.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.util.QMUILangHelper; + public class QMUIDraggableScrollBar extends View { private int[] STATE_PRESSED = new int[]{android.R.attr.state_pressed}; @@ -71,6 +71,7 @@ public class QMUIDraggableScrollBar extends View { private float mDragInnerTop = 0; private int mAdjustDistanceProtection = QMUIDisplayHelper.dp2px(getContext(), 20); private int mAdjustMaxDistanceOnce = QMUIDisplayHelper.dp2px(getContext(), 4); + private boolean mAdjustDistanceWithAnimation = true; private boolean enableFadeInAndOut = true; public QMUIDraggableScrollBar(Context context) { @@ -90,6 +91,10 @@ public class QMUIDraggableScrollBar extends View { mCallback = callback; } + public void setAdjustDistanceWithAnimation(boolean adjustDistanceWithAnimation) { + mAdjustDistanceWithAnimation = adjustDistanceWithAnimation; + } + public void setKeepShownTime(int keepShownTime) { mKeepShownTime = keepShownTime; } @@ -237,7 +242,7 @@ public class QMUIDraggableScrollBar extends View { int totalWidth = getWidth(); int top = getScrollBarTopMargin() + (int) ((totalHeight - drawableHeight) * mPercent); int left = totalWidth - drawableWidth; - if (!mIsInDragging && mDrawableDrawTop > 0) { + if (!mIsInDragging && mDrawableDrawTop > 0 && mAdjustDistanceWithAnimation) { int moveDistance = top - mDrawableDrawTop; if (moveDistance > mAdjustMaxDistanceOnce && moveDistance < mAdjustDistanceProtection) { top = mDrawableDrawTop + mAdjustMaxDistanceOnce;