public void RefreshItemAmountInEditor(int itemAmount) { if (Application.isPlaying) { return; } dataAmount = itemAmount; RefreshMaxRowAndColumnAmount(); int currentItemAmount = itemList.Count; if (currentItemAmount > itemAmount) { for (int i = currentItemAmount - itemAmount - 1; i >= 0; i--) { ScrollItem item = itemList[itemList.Count - 1]; DestroyImmediate(item.gameObject); itemList.RemoveAt(itemList.Count - 1); } } else if (currentItemAmount < itemAmount) { int newAmount = itemAmount - currentItemAmount; for (int i = 0; i < newAmount; i++) { GameObject newItemObject = Instantiate(prefab, ScrollRect.content); ScrollItem newItem = new ScrollItem(newItemObject); newItem.SetSize(cellSize); newItem.gameObject.SetActive(true); itemList.Add(newItem); } } }
private void PutItemBackToPool(ScrollItem item) { #if UNITY_EDITOR if (itemPoolList.Contains(item)) { Debug.LogError("Scroll Enhancement 同一个item回收了两次"); return; } #endif item.gameObject.SetActive(false); itemPoolList.Add(item); }
private ScrollItem GetItemAtDataIndex(int index) { for (int i = 0; i < itemList.Count; i++) { ScrollItem item = itemList[i]; if (item.dataIndex == index) { return(item); } } return(null); }
/// <summary> /// 刷新一次所有的item /// </summary> public void RefreshItemsContent() { for (int i = 0; i < itemList.Count; i++) { ScrollItem item = itemList[i]; if (item.dataIndex < 0 || item.dataIndex >= dataAmount) { continue; } if (onItemNeedRefreshContentCallback != null) { onItemNeedRefreshContentCallback.Call(item.dataIndex, item.itemLuaClass); } } }
public void RefreshItemsLayoutInEditor() { if (Application.isPlaying) { return; } RefreshMaxRowAndColumnAmount(); for (int i = 0; i < itemList.Count; i++) { ScrollItem item = itemList[i]; item.SetSize(cellSize); Vector2 itemPos = CalculateIndexItemAnchorPosition(i); item.SetAnchorPosition(itemPos); item.SetSize(cellSize); } }
private ScrollItem GetItemFromPool() { if (itemPoolList.Count > 0) { ScrollItem item = itemPoolList[itemPoolList.Count - 1]; itemPoolList.RemoveAt(itemPoolList.Count - 1); item.gameObject.SetActive(true); return(item); } GameObject newItemObject = Instantiate(prefab); ScrollItem newItem = new ScrollItem(newItemObject); newItem.gameObject.SetActive(true); newItem.rectTransform.SetParent(ScrollRect.content); newItem.rectTransform.localScale = Vector3.one; if (onCreateNewItemPrefabCallback != null) { newItem.itemLuaClass = onCreateNewItemPrefabCallback.Invoke <RectTransform, LuaTable>(newItem.rectTransform); } return(newItem); }
public void UpdateItemsVisibility() { //hide items int itemNeedStartDataIndex; int itemNeedEndDataIndex; if (startAxis == Axis.Horizontal) { itemNeedStartDataIndex = VisibleRowStartIndex * maxColumnAmount; itemNeedEndDataIndex = VisibleRowEndIndex * maxColumnAmount; } else { itemNeedStartDataIndex = VisibleColumnStartIndex * maxRowAmount; itemNeedEndDataIndex = VisibleColumnEndIndex * maxRowAmount; } for (int i = itemList.Count - 1; i >= 0; i--) { ScrollItem item = itemList[i]; if (item.dataIndex >= dataAmount) { PutItemBackToPool(item); itemList.RemoveAt(i); continue; } if (item.dataIndex < itemNeedStartDataIndex) { PutItemBackToPool(item); itemList.RemoveAt(i); continue; } if (item.dataIndex > itemNeedEndDataIndex) { PutItemBackToPool(item); itemList.RemoveAt(i); } } //new items for (int i = itemNeedStartDataIndex; i <= itemNeedEndDataIndex; i++) { if (i < 0 || i >= dataAmount) { continue; } ScrollItem item = GetItemAtDataIndex(i); if (item == null) { item = GetItemFromPool(); itemList.Add(item); if (onItemNeedRefreshContentCallback != null) { onItemNeedRefreshContentCallback.Call(i, item.itemLuaClass); } } item.SetSize(cellSize); item.SetDataIndex(i); Vector2 itemPosition = CalculateIndexItemAnchorPosition(i); item.SetAnchorPosition(itemPosition); } }