/// <summary> /// 初始化排名显示 /// </summary> private void InitRankList() { for (int i = 0; i < fixedCount; i++) { ShowPlayerInfo tempItem = Instantiate(itemPrefab, content); dataList.Add(tempItem); dataListOrigin.Add(tempItem); SetRankInfo(tempItem, i); } }
/// <summary> /// 设置每个显示元素的位置 /// </summary> /// 显示元素 /// <param name="trans"></param> /// 显示的是第几个元素 /// <param name="index"></param> private void SetRankPos(ShowPlayerInfo trans, int index) { trans.rectTransform.anchoredPosition = new Vector2 ( firstItemAnchoredPos.x, index == 0 ? firstItemAnchoredPos.y : firstItemAnchoredPos.y - index * (layout.cellSize.y + layout.spacing.y) ); }
private bool initTrigger = true; //第一次按按钮初始化,之后不用 /// <summary> /// 监听滚动的事件,在检测到有元素超出显示范围时复用 /// </summary> private void OnScroll() { //向下滚动 while (content.anchoredPosition.y >= layout.padding.top + (headIndex + 1) * (layout.cellSize.y + layout.spacing.y) && tailIndex != totalCount - 1) { //将数据列表中的第一个元素移动到最后一个 ShowPlayerInfo item = dataList[0]; dataList.Remove(item); dataList.Add(item); //设置位置 SetRankPos(item, tailIndex + 1); //设置显示 SetRankInfo(item, tailIndex + 1); headIndex++; tailIndex++; } //向上滑 while (content.anchoredPosition.y <= layout.padding.top + headIndex * (layout.cellSize.y + layout.spacing.y) && headIndex != 0) { //将数据列表中的最后一个元素移动到第一个 ShowPlayerInfo item = dataList.Last(); dataList.Remove(item); dataList.Insert(0, item); //设置位置 SetRankPos(item, headIndex - 1); //设置显示 SetRankInfo(item, headIndex - 1); headIndex--; tailIndex--; } }
/// <summary> /// 设置显示元素内容 /// </summary> /// 显示元素 /// <param name="trans"></param> /// 对应显示内容顺序 /// <param name="index"></param> private void SetRankInfo(ShowPlayerInfo trans, int index) { trans.ShowRankInfo(UserList[index], index); }