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; } }
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; // } }
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; } }
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]); } } } }