mirror of
https://github.com/material-components/material-components-android.git
synced 2026-02-20 08:39:55 +08:00
[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:
parent
eba40e9345
commit
3652fde271
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user