Skip to content

Commit 3652fde

Browse files
manabu-nakamuraimhappi
authored andcommittedAug 22, 2023
[Catalog][Carousel] Update slider position when carousel is scrolled in catalog demos
Resolves #3521 Resolves #3520 GIT_ORIGIN_REV_ID=f26a8b55c9026a3418024a2e51ba3570a017c59d PiperOrigin-RevId: 558934224
1 parent eba40e9 commit 3652fde

File tree

3 files changed

+72
-8
lines changed

3 files changed

+72
-8
lines changed
 

‎catalog/java/io/material/catalog/carousel/FullScreenStrategyDemoFragment.java

+22-4
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,8 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle bundle) {
6868

6969
new WindowPreferencesManager(requireContext())
7070
.applyEdgeToEdgePreference(bottomSheetDialog.getWindow());
71-
7271
verticalDivider =
73-
new MaterialDividerItemDecoration(
74-
requireContext(), MaterialDividerItemDecoration.VERTICAL);
72+
new MaterialDividerItemDecoration(requireContext(), MaterialDividerItemDecoration.VERTICAL);
7573

7674
Button showBottomSheetButton = view.findViewById(R.id.show_bottomsheet_button);
7775
showBottomSheetButton.setOnClickListener(new OnClickListener() {
@@ -121,6 +119,26 @@ public void onClick(View v) {
121119
new CarouselAdapter(
122120
(item, position) -> fullscreenRecyclerView.scrollToPosition(position),
123121
R.layout.cat_carousel_item_vertical);
122+
fullscreenRecyclerView.addOnScrollListener(
123+
new RecyclerView.OnScrollListener() {
124+
private boolean dragged = false;
125+
126+
@Override
127+
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
128+
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
129+
dragged = true;
130+
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
131+
if (recyclerView.computeVerticalScrollRange() != 0) {
132+
positionSlider.setValue(
133+
(adapter.getItemCount() - 1)
134+
* recyclerView.computeVerticalScrollOffset()
135+
/ recyclerView.computeVerticalScrollRange()
136+
+ 1);
137+
}
138+
dragged = false;
139+
}
140+
}
141+
});
124142

125143
SnapHelper flingDisabledSnapHelper = new CarouselSnapHelper();
126144
SnapHelper flingEnabledSnapHelper = new CarouselSnapHelper(false);
@@ -151,7 +169,7 @@ public void onStartTrackingTouch(@NonNull Slider slider) {}
151169

152170
@Override
153171
public void onStopTrackingTouch(@NonNull Slider slider) {
154-
fullscreenRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
172+
fullscreenRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
155173
}
156174
});
157175

‎catalog/java/io/material/catalog/carousel/HeroCarouselDemoFragment.java

+25-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,31 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle bundle) {
101101

102102
CarouselAdapter adapter =
103103
new CarouselAdapter(
104-
(item, position) -> heroStartRecyclerView.scrollToPosition(position),
104+
(item, position) -> {
105+
heroStartRecyclerView.scrollToPosition(position);
106+
positionSlider.setValue(position + 1);
107+
},
105108
R.layout.cat_carousel_item);
109+
heroStartRecyclerView.addOnScrollListener(
110+
new RecyclerView.OnScrollListener() {
111+
private boolean dragged = false;
112+
113+
@Override
114+
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
115+
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
116+
dragged = true;
117+
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
118+
if (recyclerView.computeHorizontalScrollRange() != 0) {
119+
positionSlider.setValue(
120+
(adapter.getItemCount() - 1)
121+
* recyclerView.computeHorizontalScrollOffset()
122+
/ recyclerView.computeHorizontalScrollRange()
123+
+ 1);
124+
}
125+
dragged = false;
126+
}
127+
}
128+
});
106129

107130
SnapHelper disableFlingSnapHelper = new CarouselSnapHelper();
108131
SnapHelper enableFlingSnapHelper = new CarouselSnapHelper(false);
@@ -137,7 +160,7 @@ public void onStartTrackingTouch(@NonNull Slider slider) {}
137160

138161
@Override
139162
public void onStopTrackingTouch(@NonNull Slider slider) {
140-
heroStartRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
163+
heroStartRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
141164
}
142165
});
143166

‎catalog/java/io/material/catalog/carousel/MultiBrowseCarouselDemoFragment.java

+25-2
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,31 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle bundle) {
109109

110110
CarouselAdapter adapter =
111111
new CarouselAdapter(
112-
(item, position) -> multiBrowseStartRecyclerView.scrollToPosition(position),
112+
(item, position) -> {
113+
multiBrowseStartRecyclerView.scrollToPosition(position);
114+
positionSlider.setValue(position + 1);
115+
},
113116
R.layout.cat_carousel_item_narrow);
117+
multiBrowseStartRecyclerView.addOnScrollListener(
118+
new RecyclerView.OnScrollListener() {
119+
private boolean dragged = false;
120+
121+
@Override
122+
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
123+
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
124+
dragged = true;
125+
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
126+
if (recyclerView.computeHorizontalScrollRange() != 0) {
127+
positionSlider.setValue(
128+
(adapter.getItemCount() - 1)
129+
* recyclerView.computeHorizontalScrollOffset()
130+
/ recyclerView.computeHorizontalScrollRange()
131+
+ 1);
132+
}
133+
dragged = false;
134+
}
135+
}
136+
});
114137

115138
itemCountDropdown.setOnItemClickListener(
116139
(parent, view1, position, id) -> {
@@ -126,7 +149,7 @@ public void onStartTrackingTouch(@NonNull Slider slider) {}
126149

127150
@Override
128151
public void onStopTrackingTouch(@NonNull Slider slider) {
129-
multiBrowseStartRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
152+
multiBrowseStartRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
130153
}
131154
});
132155

0 commit comments

Comments
 (0)
Please sign in to comment.