/// <summary> /// 在itemsList后面补上一个item /// </summary> void AddToBack(PVPListItem backItem, PVPListItem newItem, int newIndex, PVPListData newData) { InitItem(newItem, newIndex, newData); // 计算新item的位置 if (m_SV.movement == UIScrollView.Movement.Vertical) { float offsetY = backItem.widget.height * 0.5f + gapDis + newItem.widget.height * 0.5f; if (arrangeDirection == ArrangeDirection.Down_to_Up) { offsetY *= -1f; } newItem.widget.transform.localPosition = backItem.widget.cachedTransform.localPosition - new Vector3(0f, offsetY, 0f); } else { float offsetX = backItem.widget.width * 0.5f + gapDis + newItem.widget.width * 0.5f; if (arrangeDirection == ArrangeDirection.Right_to_Left) { offsetX *= -1f; } newItem.widget.transform.localPosition = backItem.widget.cachedTransform.localPosition + new Vector3(offsetX, 0f, 0f); } newItem.transform.SetAsLastSibling(); //m_grid.repositionNow = true; //m_grid.Reposition(); }
/// <summary> /// 构造一个 item 对象 /// </summary> /// <returns>The item.</returns> PVPListItem CreateItem() { GameObject go = NGUITools.AddChild(this.gameObject, itemPrefab); UIWidget widget = go.GetComponent <UIWidget>(); PVPListItem item = go.GetComponent <PVPListItem>();//new LoopItemObject(); item.widget = widget; go.SetActive(true); return(item); }
/// <summary> /// 用数据列表来初始化scrollview /// </summary> /// <param name="item">Item.</param> /// <param name="indexData">Index data.</param> /// <param name="data">Data.</param> void InitItem(PVPListItem item, int dataIndex, PVPListData data) { item.dataIndex = dataIndex; // print(item.gameObject.name); if (OnItemInit != null) { OnItemInit(item, data); } //item.widget.transform.localPosition = itemStartPos; }
/// <summary> /// 将要移除的item放入对象池中 /// --这个里我保证这个对象池中存在的对象不超过3个 /// </summary> /// <param name="item">Item.</param> void PutItemToLoop(PVPListItem item) { if (itemLoop.Count >= 3) { Destroy(item.widget.gameObject); return; } item.dataIndex = -1; item.widget.gameObject.SetActive(false); itemLoop.Enqueue(item); }
private void OnInitItem(PVPListItem item, PVPListData data) { PVPListData myData = data as PVPListData; PVPListItem itemComp = item.widget.GetComponent <PVPListItem>(); }
void Validate() { if (datasList == null || datasList.Count == 0) { return; } // 如果itemsList还不存在 if (itemsList == null || itemsList.Count == 0) { itemsList = new List <PVPListItem>(); PVPListItem item = GetItemFromLoop(); InitItem(item, 0, datasList[0]); firstItem = lastItem = item; itemsList.Add(item); m_SV.ResetPosition(); //Validate(); } // bool all_invisible = true; foreach (PVPListItem item in itemsList) { if (item.widget.isVisible == true) { all_invisible = false; } } if (all_invisible == true) { return; } // 先判断前端是否要增减 if (firstItem.widget.isVisible) { // 判断要不要在它的前面补充一个item if (firstItem.dataIndex > 0) { PVPListItem item = GetItemFromLoop(); // 初化:数据索引、大小、位置、显示 int index = firstItem.dataIndex - 1; //InitItem(item, index, datasList[index]); AddToFront(firstItem, item, index, datasList[index]); firstItem = item; itemsList.Insert(0, item); //Validate(); } } else { // 判断要不要将它移除 // 条件:自身是不可见的;且它后一个item也是不可见的(或被被裁剪过半的). // 这有个隐含条件是itemsList.Count>=2. if (itemsList.Count >= 2 && itemsList[0].widget.isVisible == false && itemsList[1].widget.isVisible == false) { itemsList.Remove(firstItem); PutItemToLoop(firstItem); firstItem = itemsList[0]; //Validate(); } } // 再判断后端是否要增减 if (lastItem.widget.isVisible) { // 判断要不要在它的后面补充一个item if (lastItem.dataIndex < datasList.Count - 1) { PVPListItem item = GetItemFromLoop(); // 初化:数据索引、大小、位置、显示 int index = lastItem.dataIndex + 1; AddToBack(lastItem, item, index, datasList[index]); lastItem = item; itemsList.Add(item); //Validate(); } } else { // 判断要不要将它移除 // 条件:自身是不可见的;且它前一个item也是不可见的(或被被裁剪过半的). // 这有个隐含条件是itemsList.Count>=2. if (itemsList.Count >= 2 && itemsList[itemsList.Count - 1].widget.isVisible == false && itemsList[itemsList.Count - 2].widget.isVisible == false) { itemsList.Remove(lastItem); PutItemToLoop(lastItem); lastItem = itemsList[itemsList.Count - 1]; //UIGrid ug =new UIGrid(); //Validate(); } } }