예제 #1
0
 private void SetPositionByIndex(ScrollViewNode node, int index)
 {
     if (scrollView.movement == UIScrollView.Movement.Horizontal)
     {
         int x = index / maxPerLine;
         int y = index % maxPerLine;
         node.transform.localPosition = Vector3.right * x * cellWidth + Vector3.down * y * cellHight;
     }
     else
     {
         int x = index % maxPerLine;
         int y = index / maxPerLine;
         node.transform.localPosition = Vector3.right * x * cellWidth + Vector3.down * y * cellHight;
     }
 }
예제 #2
0
    public int NodeIndex(ScrollViewNode node)
    {
        return(node.NodeIndex);
//		if(scrollView.movement == UIScrollView.Movement.Horizontal)
//		{
//			int x = Mathf.FloorToInt(node.Trans.localPosition.x/cellWidth);
//			int y = Mathf.FloorToInt(node.Trans.localPosition.y/cellHight);
//			return  x* maxPerLine+y;
//		}
//		else //if(scrollView.movement == UIScrollView.Movement.Vertical)
//		{
//			int x = Mathf.FloorToInt(node.Trans.localPosition.x/cellWidth);
//			int y = Mathf.FloorToInt(node.Trans.localPosition.y/cellHight);
//			return x+y*maxPerLine;
//		}
    }
예제 #3
0
    public void Awake()
    {
        if (Node != null)
        {
            Node.SetActive(false);
        }
        if (scrollView == null)
        {
            scrollView = GetComponent <UIScrollView>();
        }


        if (panel == null)
        {
            panel = scrollView.GetComponent <UIPanel>();
        }
        if (grid == null)
        {
            grid = root.GetComponent <UIGrid>();
        }
        mTransform = transform;
        if (grid != null)
        {
            grid.enabled = false;
            cellWidth    = grid.cellWidth;
            cellHight    = grid.cellHeight;
            maxPerLine   = grid.maxPerLine;
        }
        if (autoSizeClip)
        {
            if (scrollView.movement == UIScrollView.Movement.Horizontal)
            {
                panel.SetRect(100, 100, ViewSize.x, panel.GetViewSize().y);
            }
            else
            {
                panel.SetRect(0, 0, panel.GetViewSize().x, ViewSize.y);
            }
        }

        panelWidth       = panel.GetViewSize().x;
        panelHight       = panel.GetViewSize().y;
        panel.clipOffset = Vector2.zero;

        mTransform.localPosition = Vector3.zero;
        if (scrollView.movement == UIScrollView.Movement.Horizontal)
        {
            showLineCount      = Mathf.CeilToInt((panelWidth - panel.clipSoftness.x * 2) / cellWidth);
            root.localPosition = Vector3.left * (panelWidth / 2 - panel.clipSoftness.x - cellWidth / 2);
        }
        else
        {
            showLineCount      = Mathf.CeilToInt((panelHight - panel.clipSoftness.y * 2) / cellHight);
            root.localPosition = Vector3.up * (panelHight / 2 - panel.clipSoftness.y - cellHight / 2);
        }

        if (cacheNodes.Count == 0)
        {
            int i = 0;
            while (i++ < (showLineCount + 2) * maxPerLine)
            {
                GameObject     go   = NGUITools.AddChild(root.gameObject, Node);
                ScrollViewNode node = go.GetComponent <ScrollViewNode>();
                cacheNodes.Add(node);
                node.viewHelper = this;
                go.SetActive(false);
            }

            scrollView.onMomentumMove = onMomentumMove;
            scrollView.onDragStarted  = onDragStart;
        }

        if (sNode == null)
        {
            GameObject go = new GameObject();
            go.name = "sNode";
            UIWidget widget = go.AddComponent <UIWidget>();
            widget.SetRect(0, 0, cellWidth, cellHight);
            sNode            = go.transform;
            sNode.parent     = root;
            sNode.localScale = Vector3.one;
        }
        if (eNode == null)
        {
            GameObject go = new GameObject();
            go.name = "eNode";
            UIWidget widget = go.AddComponent <UIWidget>();
            widget.SetRect(0, 0, cellWidth, cellHight);
            eNode            = go.transform;
            eNode.parent     = root;
            eNode.localScale = Vector3.one;
        }
    }
예제 #4
0
    public void RefreshView(bool force = false)
    {
        if (totalLineCount * maxPerLine <= cacheNodes.Count)
        {
            if (force)
            {
                int index = 0;
                foreach (object tData in Data)
                {
                    cacheNodes[index].gameObject.SetActive(true);
                    cacheNodes[index].NodeIndex = index;
                    cacheNodes[index].SetInfo(DataList[index]);
                    SetPositionByIndex(cacheNodes[index], index);
                    index++;
                }
                while (index < cacheNodes.Count)
                {
                    cacheNodes[index].gameObject.SetActive(false);
                    index++;
                }
            }
        }
        else
        {
            int curIndex = CurrentIndex;
            int sIndex   = 0;
            if (curIndex <= 0)
            {
                sIndex = 0;
            }
            else if (curIndex > Data.Count - cacheNodes.Count)
            {
                sIndex = Data.Count - cacheNodes.Count;
            }
            else
            {
                sIndex = curIndex - maxPerLine;
            }
            if (force)
            {
                for (int index = sIndex; index < (sIndex + cacheNodes.Count); index++)
                {
                    int nIndex = index - sIndex;

                    cacheNodes[nIndex].gameObject.SetActive(true);
                    SetPositionByIndex(cacheNodes[nIndex], index);
                    cacheNodes[nIndex].NodeIndex = index;
                    cacheNodes[nIndex].SetInfo(DataList[index]);
                }
            }
            else
            {
                int firstIndex = NodeIndex(cacheNodes[0]);
                int lastIndex  = NodeIndex(cacheNodes[cacheNodes.Count - 1]);
                for (int index = sIndex; index < (sIndex + cacheNodes.Count); index++)
                {
                    int nIndex = index - sIndex;
                    if (index >= firstIndex && index <= lastIndex)
                    {
                        continue;
                    }
                    Debug.LogError("nindex" + nIndex);
                    ScrollViewNode firstNode = cacheNodes[0];
                    ScrollViewNode lastNode  = cacheNodes[cacheNodes.Count - 1];
                    ScrollViewNode node      = null;
                    if (index < firstIndex)
                    {
                        cacheNodes.Remove(lastNode);
                        cacheNodes.Insert(nIndex, lastNode);
                        node = lastNode;
                    }
                    else if (index > lastIndex)
                    {
                        cacheNodes.Remove(firstNode);
                        cacheNodes.Add(firstNode);
                        node = firstNode;
                    }
                    node.gameObject.SetActive(true);
                    SetPositionByIndex(node, index);
                    node.NodeIndex = index;
                    node.SetInfo(DataList[index]);
                }
            }
        }
    }