Ejemplo n.º 1
0
 /// <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();
 }
Ejemplo n.º 2
0
    /// <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);
    }
Ejemplo n.º 3
0
    /// <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;
    }
Ejemplo n.º 4
0
 /// <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);
 }
Ejemplo n.º 5
0
 private void OnInitItem(PVPListItem item, PVPListData data)
 {
     PVPListData myData   = data as PVPListData;
     PVPListItem itemComp = item.widget.GetComponent <PVPListItem>();
 }
Ejemplo n.º 6
0
    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();
            }
        }
    }