diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index d586b700fe9..b015ba95787 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -2357,19 +2357,12 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { requestFocus(); thumbIsPressed = true; + updateThumbWidthWhenPressed(); + onStartTrackingTouch(); + snapTouchPosition(); updateHaloHotspot(); - // Update the thumb width when pressed. - if (hasGapBetweenThumbAndTrack()) { - defaultThumbWidth = thumbWidth; - defaultThumbTrackGapSize = thumbTrackGapSize; - int pressedThumbWidth = Math.round(thumbWidth * THUMB_WIDTH_PRESSED_RATIO); - int delta = thumbWidth - pressedThumbWidth; - setThumbWidth(pressedThumbWidth); - setThumbTrackGapSize(thumbTrackGapSize - delta / 2); - } invalidate(); - onStartTrackingTouch(); break; case MotionEvent.ACTION_MOVE: if (!thumbIsPressed) { @@ -2378,15 +2371,17 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { return false; } getParent().requestDisallowInterceptTouchEvent(true); - onStartTrackingTouch(); - } - if (!pickActiveThumb()) { - // Couldn't determine the active thumb yet. - break; + if (!pickActiveThumb()) { + // Couldn't determine the active thumb yet. + break; + } + + thumbIsPressed = true; + updateThumbWidthWhenPressed(); + onStartTrackingTouch(); } - thumbIsPressed = true; snapTouchPosition(); updateHaloHotspot(); invalidate(); @@ -2430,6 +2425,18 @@ && abs(lastEvent.getY() - event.getY()) <= scaledTouchSlop) { return true; } + private void updateThumbWidthWhenPressed() { + // Update thumb width and track gap size when pressed. + if (hasGapBetweenThumbAndTrack()) { + defaultThumbWidth = thumbWidth; + defaultThumbTrackGapSize = thumbTrackGapSize; + int pressedThumbWidth = Math.round(thumbWidth * THUMB_WIDTH_PRESSED_RATIO); + int delta = thumbWidth - pressedThumbWidth; + setThumbWidth(pressedThumbWidth); + setThumbTrackGapSize(thumbTrackGapSize - delta / 2); + } + } + private double snapPosition(float position) { if (stepSize > 0.0f) { int stepCount = (int) ((valueTo - valueFrom) / stepSize);