Esempio n. 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);
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
                }
            }
        }
Esempio n. 5
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);
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
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);
            }
        }