Skip to content

Commit deec1db

Browse files
mdvaccafacebook-github-bot
authored andcommitted
Add snapToAlignment to ReactHorizontalScrollViewManager
Summary: This diff adds the new snapToAlignment into ReactHorizontalScrollViewManager changelog: [Android][Added] Implement snapToAlignment into ReactHorizontalScrollViewManager Reviewed By: JoshuaGross Differential Revision: D31174545 fbshipit-source-id: c56bfca207980428be98dd21a5387a0ff6bcd296
1 parent a54cfb9 commit deec1db

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java

+7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
package com.facebook.react.views.scroll;
99

10+
import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_DISABLED;
11+
1012
import android.animation.Animator;
1113
import android.animation.ObjectAnimator;
1214
import android.animation.PropertyValuesHolder;
@@ -94,6 +96,7 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
9496
private @Nullable List<Integer> mSnapOffsets;
9597
private boolean mSnapToStart = true;
9698
private boolean mSnapToEnd = true;
99+
private int mSnapToAlignment = SNAP_ALIGNMENT_DISABLED;
97100
private ReactViewBackgroundManager mReactBackgroundManager;
98101
private boolean mPagedArrowScrolling = false;
99102
private int pendingContentOffsetX = UNSET_CONTENT_OFFSET;
@@ -239,6 +242,10 @@ public void setSnapToEnd(boolean snapToEnd) {
239242
mSnapToEnd = snapToEnd;
240243
}
241244

245+
public void setSnapToAlignment(int snapToAlignment) {
246+
mSnapToAlignment = snapToAlignment;
247+
}
248+
242249
public void flashScrollIndicators() {
243250
awakenScrollBars();
244251
}

ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java

+5
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ public void setSnapToInterval(ReactHorizontalScrollView view, float snapToInterv
102102
view.setSnapInterval((int) (snapToInterval * screenDisplayMetrics.density));
103103
}
104104

105+
@ReactProp(name = "snapToAlignment")
106+
public void setSnapToAlignment(ReactHorizontalScrollView view, String alignment) {
107+
view.setSnapToAlignment(ReactScrollViewHelper.parseSnapToAlignment(alignment));
108+
}
109+
105110
@ReactProp(name = "snapToOffsets")
106111
public void setSnapToOffsets(
107112
ReactHorizontalScrollView view, @Nullable ReadableArray snapToOffsets) {

ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java

+20
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.view.View;
1212
import android.view.ViewGroup;
1313
import android.widget.OverScroller;
14+
import androidx.annotation.Nullable;
1415
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
1516
import com.facebook.react.bridge.ReactContext;
1617
import com.facebook.react.uimanager.UIManagerHelper;
@@ -26,6 +27,11 @@ public class ReactScrollViewHelper {
2627
public static final String AUTO = "auto";
2728
public static final String OVER_SCROLL_NEVER = "never";
2829

30+
public static final int SNAP_ALIGNMENT_DISABLED = 0;
31+
public static final int SNAP_ALIGNMENT_START = 1;
32+
public static final int SNAP_ALIGNMENT_CENTER = 2;
33+
public static final int SNAP_ALIGNMENT_END = 3;
34+
2935
public interface ScrollListener {
3036
void onScroll(
3137
ViewGroup scrollView, ScrollEventType scrollEventType, float xVelocity, float yVelocity);
@@ -119,6 +125,20 @@ public static int parseOverScrollMode(String jsOverScrollMode) {
119125
}
120126
}
121127

128+
public static int parseSnapToAlignment(@Nullable String alignment) {
129+
if (alignment == null) {
130+
return SNAP_ALIGNMENT_DISABLED;
131+
} else if ("start".equalsIgnoreCase(alignment)) {
132+
return SNAP_ALIGNMENT_START;
133+
} else if ("center".equalsIgnoreCase(alignment)) {
134+
return SNAP_ALIGNMENT_CENTER;
135+
} else if ("end".equals(alignment)) {
136+
return SNAP_ALIGNMENT_END;
137+
} else {
138+
throw new JSApplicationIllegalArgumentException("wrong snap alignment value: " + alignment);
139+
}
140+
}
141+
122142
public static int getDefaultScrollAnimationDuration(Context context) {
123143
if (!mSmoothScrollDurationInitialized) {
124144
mSmoothScrollDurationInitialized = true;

0 commit comments

Comments
 (0)