diff --git a/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java b/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java index e071aa10774..8d017e1fdc8 100644 --- a/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java +++ b/lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java @@ -768,10 +768,14 @@ public void onStopNestedScroll( targetState = STATE_EXPANDED; } else { int currentTop = child.getTop(); - if (currentTop > halfExpandedOffset) { - targetState = STATE_HALF_EXPANDED; - } else { + if (currentTop < halfExpandedOffset) { targetState = STATE_EXPANDED; + } else { + if (shouldSkipHalfExpandedStateWhenDragging()) { + targetState = STATE_EXPANDED; + } else { + targetState = STATE_HALF_EXPANDED; + } } } } else if (hideable && shouldHide(child, getYVelocity())) { @@ -796,10 +800,10 @@ public void onStopNestedScroll( } } } else { - if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { - targetState = STATE_HALF_EXPANDED; - } else { + if (shouldSkipHalfExpandedStateWhenDragging() || Math.abs(currentTop - halfExpandedOffset) >= Math.abs(currentTop - collapsedOffset)) { targetState = STATE_COLLAPSED; + } else { + targetState = STATE_HALF_EXPANDED; } } } @@ -809,10 +813,10 @@ public void onStopNestedScroll( } else { // Settle to nearest height. int currentTop = child.getTop(); - if (Math.abs(currentTop - halfExpandedOffset) < Math.abs(currentTop - collapsedOffset)) { - targetState = STATE_HALF_EXPANDED; - } else { + if (shouldSkipHalfExpandedStateWhenDragging() || Math.abs(currentTop - halfExpandedOffset) >= Math.abs(currentTop - collapsedOffset)) { targetState = STATE_COLLAPSED; + } else { + targetState = STATE_HALF_EXPANDED; } } }