我的滚动列表的行数并不总是相同的,当最后一行在滚动列表的底部完全可见时,我想禁用向下滚动。
但是现在,如果最后一行(在本例中是第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);
}
发布于 2019-05-21 23:13:24
,
List<row>
变量,一个存储所有的行,另一个只存储应该查看和交互的行。编辑:I missread。忘记我写的第一点。使用两个列表,如第二点所示。滚动时,检查最后可见的行是否为“所有行”列表中的最后一行。如果是这样,请不要滚动。
https://stackoverflow.com/questions/56240460
复制相似问题