diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index e889521..0000000 --- a/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -connection.project.dir= -eclipse.preferences.version=1 diff --git a/library/src/main/java/jarvis/com/library/NestedTouchScrollingLayout.java b/library/src/main/java/jarvis/com/library/NestedTouchScrollingLayout.java index 70ac587..1171f6b 100644 --- a/library/src/main/java/jarvis/com/library/NestedTouchScrollingLayout.java +++ b/library/src/main/java/jarvis/com/library/NestedTouchScrollingLayout.java @@ -267,10 +267,33 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { } } + private boolean isTouchUnderChildView(MotionEvent event) { + View targetChildView = getChildAt(0); + float translationX = targetChildView.getTranslationX(); + float translationY = targetChildView.getTranslationY(); + float x = event.getX(); + float y = event.getY(); + return x >= targetChildView.getLeft() + translationX && + x <= targetChildView.getRight() + translationX && + y >= targetChildView.getTop() + translationY && + y <= targetChildView.getBottom() + translationY; + } + + /** + * 不拦截 Touch 事件的几种情况 + * 1.不开启父亲布局拦截. + * 2.当前子 View 为 null + * 3.当前 Touch 事件没用作用到子 View + * @param event + * @return + */ @Override public boolean onTouchEvent(MotionEvent event) { float velocityY = 0; - if (getChildAt(0) == null || !isParentDispatchTouchEvent) { + + if (!isParentDispatchTouchEvent || + getChildAt(0) == null || + !isTouchUnderChildView(event)) { return super.onTouchEvent(event); } if (isAnimating()) {