diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 1c4c2e770f7..a5aeeb0f3cb 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -1943,7 +1943,7 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { // If we're inside a vertical scrolling container, // we should start dragging in ACTION_MOVE - if (isInVerticalScrollingContainer()) { + if (isPotentialVerticalScroll(event)) { break; } @@ -1964,7 +1964,7 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { case MotionEvent.ACTION_MOVE: if (!thumbIsPressed) { // Check if we're trying to scroll vertically instead of dragging this Slider - if (isInVerticalScrollingContainer() && abs(x - touchDownX) < scaledTouchSlop) { + if (isPotentialVerticalScroll(event) && abs(x - touchDownX) < scaledTouchSlop) { return false; } getParent().requestDisallowInterceptTouchEvent(true); @@ -1996,6 +1996,7 @@ && abs(lastEvent.getY() - event.getY()) <= scaledTouchSlop) { if (activeThumbIdx != -1) { snapTouchPosition(); + updateHaloHotspot(); activeThumbIdx = -1; onStopTrackingTouch(); } @@ -2347,6 +2348,14 @@ private boolean isInVerticalScrollingContainer() { return false; } + private static boolean isMouseEvent(MotionEvent event) { + return event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE; + } + + private boolean isPotentialVerticalScroll(MotionEvent event) { + return !isMouseEvent(event) && isInVerticalScrollingContainer(); + } + @SuppressWarnings("unchecked") private void dispatchOnChangedProgrammatically() { for (L listener : changeListeners) {