From 77d02393a4c98d23d1826d172d703128e3ec1434 Mon Sep 17 00:00:00 2001 From: lry <1043214265@qq.com> Date: Wed, 8 Feb 2023 09:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../consecutivescrollerdemo/SinkStickyActivity.java | 2 +- .../ConsecutiveScrollerLayout.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/donkingliang/consecutivescrollerdemo/SinkStickyActivity.java b/app/src/main/java/com/donkingliang/consecutivescrollerdemo/SinkStickyActivity.java index 76ca1d6..f13700d 100644 --- a/app/src/main/java/com/donkingliang/consecutivescrollerdemo/SinkStickyActivity.java +++ b/app/src/main/java/com/donkingliang/consecutivescrollerdemo/SinkStickyActivity.java @@ -39,7 +39,7 @@ protected void onCreate(Bundle savedInstanceState) { scrollerLayout.setOnVerticalScrollChangeListener(new ConsecutiveScrollerLayout.OnScrollChangeListener() { @Override public void onScrollChange(View v, int scrollY, int oldScrollY, int scrollState) { - if (scrollY > flSink.getHeight()){ + if (scrollY > flSink.getHeight() || scrollY < 0){ scrollerLayout.setStickyOffset(0); // 恢复吸顶偏移量 } else { // 通过设置吸顶便宜量,实现flSink滑动隐藏时的向上移动效果 diff --git a/consecutivescroller/src/main/java/com/donkingliang/consecutivescroller/ConsecutiveScrollerLayout.java b/consecutivescroller/src/main/java/com/donkingliang/consecutivescroller/ConsecutiveScrollerLayout.java index 45a2aed..a0e0e8b 100644 --- a/consecutivescroller/src/main/java/com/donkingliang/consecutivescroller/ConsecutiveScrollerLayout.java +++ b/consecutivescroller/src/main/java/com/donkingliang/consecutivescroller/ConsecutiveScrollerLayout.java @@ -283,6 +283,11 @@ public float getInterpolation(float t) { */ private boolean isTouchNotTriggerScrollStick = false; + /** + * 判断手指触摸的view是否需要拦截事件 + */ + private boolean isIntercept = false; + /** * 在快速滑动的过程中,触摸停止滑动 */ @@ -647,6 +652,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { mDownLocation[0] = ScrollUtils.getRawX(this, ev, actionIndex); mDownLocation[1] = ScrollUtils.getRawY(this, ev, actionIndex); + isIntercept = isIntercept(mDownLocation[0], mDownLocation[1]); isTouchNotTriggerScrollStick = ScrollUtils.isTouchNotTriggerScrollStick(this, mDownLocation[0], mDownLocation[1]); break; case MotionEvent.ACTION_POINTER_DOWN: @@ -658,6 +664,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { requestDisallowInterceptTouchEvent(false); mDownLocation[0] = ScrollUtils.getRawX(this, ev, actionIndex); mDownLocation[1] = ScrollUtils.getRawY(this, ev, actionIndex); + isIntercept = isIntercept(mDownLocation[0], mDownLocation[1]); isTouchNotTriggerScrollStick = ScrollUtils.isTouchNotTriggerScrollStick(this, mDownLocation[0], mDownLocation[1]); initAdjustVelocityTrackerIfNotExists(); @@ -677,7 +684,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { int offsetY = (int) ev.getY(pointerIndex) - mEventY; int offsetX = (int) ev.getX(pointerIndex) - mEventX; if (SCROLL_ORIENTATION == SCROLL_NONE - && (isIntercept(ev) || isIntercept(mDownLocation[0], mDownLocation[1]))) { + && (isIntercept || isIntercept(ev))) { if (disableChildHorizontalScroll) { if (Math.abs(offsetY) >= mTouchSlop) { SCROLL_ORIENTATION = SCROLL_VERTICAL; @@ -723,6 +730,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { mEventX = (int) ev.getX(newPointerIndex); mDownLocation[0] = ScrollUtils.getRawX(this, ev, newPointerIndex); mDownLocation[1] = ScrollUtils.getRawY(this, ev, newPointerIndex); + isIntercept = isIntercept(mDownLocation[0], mDownLocation[1]); isTouchNotTriggerScrollStick = ScrollUtils.isTouchNotTriggerScrollStick(this, mDownLocation[0], mDownLocation[1]); } initAdjustVelocityTrackerIfNotExists(); @@ -767,6 +775,7 @@ && isIntercept(ev) && Math.abs(yVelocity) >= mMinimumVelocity) { mDownLocation[0] = 0; mDownLocation[1] = 0; isTouchNotTriggerScrollStick = false; + isIntercept = false; overSpinner(); break; } @@ -803,7 +812,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { // 需要拦截事件 if (SCROLL_ORIENTATION != SCROLL_HORIZONTAL - && (isIntercept(ev) || isIntercept(mDownLocation[0], mDownLocation[1]))) { + && (isIntercept || isIntercept(ev))) { return true; } break;