示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
            }
        }