diff --git a/catalog/java/io/material/catalog/carousel/FullScreenStrategyDemoFragment.java b/catalog/java/io/material/catalog/carousel/FullScreenStrategyDemoFragment.java index 4d756a6c9..824df49ac 100644 --- a/catalog/java/io/material/catalog/carousel/FullScreenStrategyDemoFragment.java +++ b/catalog/java/io/material/catalog/carousel/FullScreenStrategyDemoFragment.java @@ -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); } }); diff --git a/catalog/java/io/material/catalog/carousel/HeroCarouselDemoFragment.java b/catalog/java/io/material/catalog/carousel/HeroCarouselDemoFragment.java index ed3eecb2c..f4c55eee6 100644 --- a/catalog/java/io/material/catalog/carousel/HeroCarouselDemoFragment.java +++ b/catalog/java/io/material/catalog/carousel/HeroCarouselDemoFragment.java @@ -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); } }); diff --git a/catalog/java/io/material/catalog/carousel/MultiBrowseCarouselDemoFragment.java b/catalog/java/io/material/catalog/carousel/MultiBrowseCarouselDemoFragment.java index 8deb1f79a..4b9375abf 100644 --- a/catalog/java/io/material/catalog/carousel/MultiBrowseCarouselDemoFragment.java +++ b/catalog/java/io/material/catalog/carousel/MultiBrowseCarouselDemoFragment.java @@ -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); } });