/// <summary> /// ScrollView变量初期化 /// </summary> public void Clear() { isActived = false; _scrollView.DisableSpring(); _scrollView.restrictWithinPanel = false; if (_scrollOrientation == ScrollOrientation.VERTICAL) { _scrollView.MoveRelative(new Vector3(0, _scrollView.panel.clipOffset.y, 0)); } if (_scrollOrientation == ScrollOrientation.HORIZONTAL) { _scrollView.MoveRelative(new Vector3(_scrollView.panel.clipOffset.x, 0, 0)); } for (int i = _itemsList.Count - 1; i >= 0; i--) { (this as ObjectPool <GameObject>).Store(_itemsList[i].gameObject); } _itemsList = null; _lastPosition = 0; _itemsToRecycleBefore = 0; onListMoved = null; _scrollView.restrictWithinPanel = true; }
/// <summary> /// 初始化方法 /// 步骤: /// 1.AddComponent<此组件>() /// 2.设置EnableMultiLine属性值 /// 例如:多行多列 /// EnableMultiLine = true /// _spacing_row = 行间距 /// _spacing_line = 列间距 /// 3.预制继承自UIScrollViewItemBase的子类 /// 4.调用Create(列表项总数,预制体)方法 /// </summary> /// <param name="items">实例化项目个数</param> /// <param name="listItemPrefab">实例化的模板</param> public void Create(int items, UIScrollViewItemBase listItemPrefab) { _itemsTotal = items; p_prefab = listItemPrefab.gameObject; switch (_scrollOrientation) { case ScrollOrientation.HORIZONTAL: if (!EnableMultiLine) { _itemSize = listItemPrefab.Size.x; _itemsVisible = Mathf.CeilToInt(GetViewportSize() / (_itemSize + _spacing)); } else { _itemSize_ml = new Vector2(listItemPrefab.Size.x, listItemPrefab.Size.y); _itemsVisible_row = Mathf.CeilToInt(_viewport.width / (_itemSize_ml.x + _spacing_line)); _itemsVisible_line = Mathf.FloorToInt(_viewport.height / (_itemSize_ml.y + _spacing_row)); } break; case ScrollOrientation.VERTICAL: if (!EnableMultiLine) { _itemSize = listItemPrefab.Size.y; _itemsVisible = Mathf.CeilToInt(GetViewportSize() / (_itemSize + _spacing)); } else { _itemSize_ml = new Vector2(listItemPrefab.Size.x, listItemPrefab.Size.y); //垂直方向时,row可显示item数量使用向下舍位取整 _itemsVisible_row = Mathf.FloorToInt(_viewport.width / (_itemSize_ml.x + _spacing_line)); _itemsVisible_line = Mathf.CeilToInt(_viewport.height / (_itemSize_ml.y + _spacing_row)); //print("_itemsVisible_row = " + _itemsVisible_row); //print("_itemsVisible_line = " + _itemsVisible_line); } break; }//end Switch //Debug.LogWarning("GetViewportSize() "+ GetViewportSize()+" "+ _itemSize // +" Mathf.CeilToInt()"+ Mathf.CeilToInt(GetViewportSize() / _itemSize) // ); int itemsToInstantiate = EnableMultiLine ? _itemsVisible_row * _itemsVisible_line : _itemsVisible; if (itemsToInstantiate > items || (items >= itemsToInstantiate && items <= 2 * itemsToInstantiate)) { itemsToInstantiate = items; //CHANGED: 2017-7-06 添加自动补齐行/列开关 if (WhetherAutomaticallyFill) { if (itemsToInstantiate % _itemsVisible_row != 0)//每行项目数不满的时候,补齐行 { itemsToInstantiate += Mathf.CeilToInt((float)itemsToInstantiate / (float)_itemsVisible_row) * _itemsVisible_row - itemsToInstantiate; } } //print("total:"+ items); //print("gen:"+ itemsToInstantiate); //print("itemsToInstantiate / _itemsVisible_row = " + (float)(itemsToInstantiate / _itemsVisible_row)); //print("itemsToInstantiate = " + itemsToInstantiate); //print("_itemsVisible_row = " + _itemsVisible_row); //print("Mathf.CeilToInt(itemsToInstantiate / _itemsVisible_row) = " + Mathf.CeilToInt(itemsToInstantiate / _itemsVisible_row)); } else { itemsToInstantiate *= 2; } _itemsList = new List <UIScrollViewItemBase>(); for (int i = 0; i < itemsToInstantiate; i++) { UIScrollViewItemBase item = EnableMultiLine ? CreateNewItem(i, _itemSize_ml) : CreateNewItem(i, _itemSize); item.onSelected = HandleOnSelectedHandler; item.Index = i; _itemsList.Add(item); ItemLoaded(item);//列表项加载完成Callback } _firstItemIndex = 0; _lastItemIndex = _itemsList.Count - 1; _itemsToRecycleAfter = EnableMultiLine ? _itemsList.Count / _itemsVisible_row - _itemsVisible_line : _itemsList.Count - _itemsVisible; //Debug.LogWarning("_itemSize = " + _itemSize); //Debug.LogWarning("_itemsVisible = " + _itemsVisible); //Debug.LogWarning("_itemsVisibles = " + _itemsVisible_row + " " + _itemsVisible_line); //Debug.LogWarning("itemsToInstantiate = " + itemsToInstantiate); //Debug.LogWarning("_itemsTotal = " + _itemsTotal); //Debug.LogWarning("_lastItemIndex = " + _lastItemIndex); //注册事件 onListMoved += Recycle;//在列表向某方向移动了一整行后触发 //List<EventDelegate> events_OnChange = new List<EventDelegate>(); //events_OnChange.Add(new EventDelegate(HandleOnScrollBarValueChangedHandler)); //_scrollBar.onChange = events_OnChange; isActived = true; }//end Create()