[Catalog][Carousel] Update slider position when carousel is scrolled in catalog demos

Resolves https://github.com/material-components/material-components-android/pull/3521
Resolves https://github.com/material-components/material-components-android/issues/3520

GIT_ORIGIN_REV_ID=f26a8b55c9026a3418024a2e51ba3570a017c59d
PiperOrigin-RevId: 558934224
This commit is contained in:
manabu-nakamura 2023-08-21 23:38:42 +00:00 committed by Naomi Koo
parent eba40e9345
commit 3652fde271
3 changed files with 72 additions and 8 deletions

View File

@ -68,10 +68,8 @@ public class FullScreenStrategyDemoFragment extends DemoFragment {
new WindowPreferencesManager(requireContext())
.applyEdgeToEdgePreference(bottomSheetDialog.getWindow());
verticalDivider =
new MaterialDividerItemDecoration(
requireContext(), MaterialDividerItemDecoration.VERTICAL);
new MaterialDividerItemDecoration(requireContext(), MaterialDividerItemDecoration.VERTICAL);
Button showBottomSheetButton = view.findViewById(R.id.show_bottomsheet_button);
showBottomSheetButton.setOnClickListener(new OnClickListener() {
@ -121,6 +119,26 @@ public class FullScreenStrategyDemoFragment extends DemoFragment {
new CarouselAdapter(
(item, position) -> fullscreenRecyclerView.scrollToPosition(position),
R.layout.cat_carousel_item_vertical);
fullscreenRecyclerView.addOnScrollListener(
new RecyclerView.OnScrollListener() {
private boolean dragged = false;
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
dragged = true;
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
if (recyclerView.computeVerticalScrollRange() != 0) {
positionSlider.setValue(
(adapter.getItemCount() - 1)
* recyclerView.computeVerticalScrollOffset()
/ recyclerView.computeVerticalScrollRange()
+ 1);
}
dragged = false;
}
}
});
SnapHelper flingDisabledSnapHelper = new CarouselSnapHelper();
SnapHelper flingEnabledSnapHelper = new CarouselSnapHelper(false);
@ -151,7 +169,7 @@ public class FullScreenStrategyDemoFragment extends DemoFragment {
@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
fullscreenRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
fullscreenRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
}
});

View File

@ -101,8 +101,31 @@ public class HeroCarouselDemoFragment extends DemoFragment {
CarouselAdapter adapter =
new CarouselAdapter(
(item, position) -> heroStartRecyclerView.scrollToPosition(position),
(item, position) -> {
heroStartRecyclerView.scrollToPosition(position);
positionSlider.setValue(position + 1);
},
R.layout.cat_carousel_item);
heroStartRecyclerView.addOnScrollListener(
new RecyclerView.OnScrollListener() {
private boolean dragged = false;
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
dragged = true;
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
if (recyclerView.computeHorizontalScrollRange() != 0) {
positionSlider.setValue(
(adapter.getItemCount() - 1)
* recyclerView.computeHorizontalScrollOffset()
/ recyclerView.computeHorizontalScrollRange()
+ 1);
}
dragged = false;
}
}
});
SnapHelper disableFlingSnapHelper = new CarouselSnapHelper();
SnapHelper enableFlingSnapHelper = new CarouselSnapHelper(false);
@ -137,7 +160,7 @@ public class HeroCarouselDemoFragment extends DemoFragment {
@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
heroStartRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
heroStartRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
}
});

View File

@ -109,8 +109,31 @@ public class MultiBrowseCarouselDemoFragment extends DemoFragment {
CarouselAdapter adapter =
new CarouselAdapter(
(item, position) -> multiBrowseStartRecyclerView.scrollToPosition(position),
(item, position) -> {
multiBrowseStartRecyclerView.scrollToPosition(position);
positionSlider.setValue(position + 1);
},
R.layout.cat_carousel_item_narrow);
multiBrowseStartRecyclerView.addOnScrollListener(
new RecyclerView.OnScrollListener() {
private boolean dragged = false;
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
dragged = true;
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
if (recyclerView.computeHorizontalScrollRange() != 0) {
positionSlider.setValue(
(adapter.getItemCount() - 1)
* recyclerView.computeHorizontalScrollOffset()
/ recyclerView.computeHorizontalScrollRange()
+ 1);
}
dragged = false;
}
}
});
itemCountDropdown.setOnItemClickListener(
(parent, view1, position, id) -> {
@ -126,7 +149,7 @@ public class MultiBrowseCarouselDemoFragment extends DemoFragment {
@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
multiBrowseStartRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
multiBrowseStartRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
}
});