diff --git a/README.md b/README.md index 88c4115..f9c17ba 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ The following props are supported: | `bouncesZoom` | `true` | Whether content bounces at the limits when zooming. | | `alwaysBounceHorizontal` | `false` | When `bounces` is enabled, content will bounce horizontally even if the content is smaller than the bounds of the scroll view. | | `alwaysBounceVertical` | `false` | When `bounces` is enabled, content will bounce vertically even if the content is smaller than the bounds of the scroll view.. | +| **android** `horizontalBounceEnabled` | `true` | If `false`, content will not bounce horizontally. | +| **android** `verticalBounceEnabled` | `true` | If `false`, content will not bounce vertically. | | **ios** `showsVerticalScrollIndicator` | `true` | Whether vertical scroll bars are visible. | | **ios** `showsHorizontalScrollIndicator` | `true` | Whether horizontal scroll bars are visible. | diff --git a/android/src/main/java/com/rnds/DirectedScrollView.java b/android/src/main/java/com/rnds/DirectedScrollView.java index 1095e90..04c5ce0 100644 --- a/android/src/main/java/com/rnds/DirectedScrollView.java +++ b/android/src/main/java/com/rnds/DirectedScrollView.java @@ -31,6 +31,8 @@ public class DirectedScrollView extends ReactViewGroup { private float minimumZoomScale = 1.0f; private float maximumZoomScale = 1.0f; private boolean bounces = true; + private boolean verticalBounceEnabled = true; + private boolean horizontalBounceEnabled = true; private boolean alwaysBounceVertical = false; private boolean alwaysBounceHorizontal = false; private boolean bouncesZoom = true; @@ -214,7 +216,7 @@ private void onActionMove(MotionEvent motionEvent) { scrollY = startScrollY + deltaY; if (bounces) { - clampAndTranslateChildren(false, getMaxScrollY() <= 0 && !alwaysBounceVertical, getMaxScrollX() <= 0 && !alwaysBounceHorizontal); + clampAndTranslateChildren(false, !verticalBounceEnabled || (getMaxScrollY() <= 0 && !alwaysBounceVertical), !horizontalBounceEnabled || (getMaxScrollX() <= 0 && !alwaysBounceHorizontal)); } else { clampAndTranslateChildren(false); } @@ -433,6 +435,14 @@ public void setBouncesZoom(final boolean bouncesZoom) { this.bouncesZoom = bouncesZoom; } + public void setVerticalBounceEnabled(final boolean verticalBounceEnabled) { + this.verticalBounceEnabled = verticalBounceEnabled; + } + + public void setHorizontalBounceEnabled(final boolean horizontalBounceEnabled) { + this.horizontalBounceEnabled = horizontalBounceEnabled; + } + public void setAlwaysBounceHorizontal(final boolean alwaysBounceHorizontal) { this.alwaysBounceHorizontal = alwaysBounceHorizontal; } diff --git a/android/src/main/java/com/rnds/DirectedScrollViewManager.java b/android/src/main/java/com/rnds/DirectedScrollViewManager.java index ed24e24..8616946 100644 --- a/android/src/main/java/com/rnds/DirectedScrollViewManager.java +++ b/android/src/main/java/com/rnds/DirectedScrollViewManager.java @@ -89,6 +89,16 @@ public void setBouncesZoom(DirectedScrollView view, @Nullable boolean bouncesZoo view.setBouncesZoom(bouncesZoom); } + @ReactProp(name = "verticalBounceEnabled", defaultBoolean = true) + public void setVerticalBounceEnabled(DirectedScrollView view, @Nullable boolean verticalBounceEnabled) { + view.setVerticalBounceEnabled(verticalBounceEnabled); + } + + @ReactProp(name = "horizontalBounceEnabled", defaultBoolean = true) + public void setHorizontalBounceEnabled(DirectedScrollView view, @Nullable boolean horizontalBounceEnabled) { + view.setHorizontalBounceEnabled(horizontalBounceEnabled); + } + @ReactProp(name = "alwaysBounceHorizontal", defaultBoolean = false) public void setAlwaysBounceHorizontal(DirectedScrollView view, @Nullable boolean alwaysBounceHorizontal) { view.setAlwaysBounceHorizontal(alwaysBounceHorizontal);