В моем списке прокрутки не всегда одинаковое количество строк, и я хочу отключить прокрутку вниз, когда последняя строка полностью видна в нижней части списка прокрутки.
Но сейчас это все еще возможнопрокрутить вниз, если последняя строка (в данном случае строка 13) полностью видна внизу списка.Затем оно выглядит как третье изображение (после дополнительной прокрутки), но я хочу, чтобы оно выглядело как второе изображение (после прокрутки).
Что можно сделать, чтобы вы не могли продолжить прокрутку вниз после того, как последняя строкаполностью видимый?
ОБНОВЛЕНИЕ: Это работает сейчас.В этой версии кода используется переменная скорость прокрутки.
Мой код:
//Creating the scroll list:
public List<Vector2> ScrolllistInitialRowPosYList = new List<Vector2>();
public List<Vector2> ScrolllistRowPosYList = new List<Vector2>();
Microsoft.Xna.Framework.Rectangle ScrollPointRectangle, tappRect, ScrollRectangle;
int ScrollLimitTopPosY = 200, ScrollLimitBottomPosY = 400, RowHeight = 60, ScrollPointStartPosY;
float ScrollAreaHeight, HeightallRows, ScrollSpeed;
ScrollPointStartPosY = ScrollLimitTopPosY;
ScrollPointRectangle = new Microsoft.Xna.Framework.Rectangle(500, ScrollPointStartPosY, ScrollPointSprite.Width, ScrollPointprite.Height);
tappRect = new Microsoft.Xna.Framework.Rectangle(-150, -100, 10, 10);
ScrollRectangle = new Microsoft.Xna.Framework.Rectangle(500, 300, ScrollRectangleSprite.Width, ScrollRectangleSprite.Height);
int FirstRowPosY = 0;
int NumberofRows = 13;
ScrollAreaHeight = ScrollLimitBottomPosY - ScrollLimitTopPosY;
int ListViewportHeight = 6 * RowHeight;
HeightallRows = NumberofRows * RowHeight - ListViewportHeight;
ScrollSpeed = HeightallRows / ScrollAreaHeight;
for (int i = 0; i <= NumberofRows - 1; i++)
{
ScrolllistInitialRowPosYList.Add(new Vector2(500, FirstRowPosY));
ScrolllistRowPosYList.Add(new Vector2(500, FirstRowPosY));
FirstRowPosY += RowHeight;
}
//Updating gestures:
case GestureType.FreeDrag:
if (tappRect.Intersects(ScrollRectangle))
{
tappRect = new Microsoft.Xna.Framework.Rectangle((int)gs.Position.X, (int)gs.Position.Y, 10, 10);
if (gs.Delta.Y > 0)
{
if (ScrollPointRectangle.Y >= ScrollLimitTopPosY + 2)
ScrollPointRectangle = new Microsoft.Xna.Framework.Rectangle(500, ScrollPointRectangle.Y - 2, ScrollPointSprite.Width, ScrollPointSprite.Height);
else
ScrollPointRectangle = new Microsoft.Xna.Framework.Rectangle(500, ScrollLimitTopPosY, ScrollPointSprite.Width, ScrollPointSprite.Height);
}
else
{
if (gs.Delta.Y < 0)
{
if (ScrollPointRectangle.Y <= ScrollLimitBottomPosY - 2)
ScrollPointRectangle = new Microsoft.Xna.Framework.Rectangle(500, ScrollPointRectangle.Y + 2, ScrollPointSprite.Width, ScrollPointSprite.Height);
else
ScrollPointRectangle = new Microsoft.Xna.Framework.Rectangle(500, ScrollLimitBottomPosY, ScrollPointSprite.Width, ScrollPointSprite.Height);
}
}
}
break;
//Updating the scroll list after someone srolled up or down:
for (int i = 0; i <= ScrolllistRowPosYList.Count - 1; i++)
{
int ScrollPosYCurrent = ScrollPointRectangle.Y;
int ScrollPosYDifference = ScrollPosYCurrent - ScrollPointStartPosY;
float RowPosYDifference = ScrollSpeed * ScrollPosYDifference;
int RowInitialPosY = (int)ScrolllistInitialRowPosYList[i].Y;
float RowCurrentPosY = RowInitialPosY - RowPosYDifference;
ScrolllistRowPosYList[i] = new Vector2(ScrolllistRowPosYList[i].X, RowCurrentPosY);
}