Код: Выделить всё
private async void ScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
if (isSnapping)
return;
isSnapping = true;
double scrollY = e.ScrollY;
int currentRow = (int)(scrollY / SnapItemHeight);
double snapTo;
// Determine scroll direction and calculate the snap position accordingly
if (scrollY > previousScrollY)
{
// Scrolling down
snapTo = (currentRow + 1) * SnapItemHeight;
}
else
{
// Scrolling up
snapTo = currentRow * SnapItemHeight;
}
// Ensure the snap position is within valid range
snapTo = Math.Max(0, snapTo);
// Small delay to ensure smooth snapping
await Task.Delay(50); // Reduced delay for smoother snapping
// Snap to the calculated position
await scrollView.ScrollToAsync(0, snapTo, true);
// Update previous scroll position
previousScrollY = scrollY;
isSnapping = false;
}
Код: Выделить всё
Код: Выделить всё
private const double SnapItemHeight = 80;
private bool isSnapping;
private double previousScrollY = 0;
если это выглядит странно, пожалуйста, дайте мне знать, я уже 3 месяца занимаюсь самообучением мобильных разработок, и мне было бы очень приятно, если бы есть какие-то предложения помимо этой темы
Подробнее здесь: https://stackoverflow.com/questions/786 ... g-like-whe
Мобильная версия