public void FillData(LayoutConfig config) { this.prefab = config.prefab; this.dir = config.dir; this.dirCellWidth = config.dirCellWidth; this.dirViewLen = config.dirViewLen; this.cellSize = config.cellSize; this.spacing = config.spacing; this.bufHalfCnt = config.bufHalfCnt; this.progress = config.progress; }
public Layout StartAxis(GridLayoutGroup.Axis startAxis) { if (layoutGroup is GridLayoutGroup glg) { glg.startAxis = startAxis; } else { Debug.LogError("Call Grid() before StartAxis()"); } return(this); }
private void InitContent(GridLayoutGroup.Axis axis) { if (childContent == null) { var type = axis == GridLayoutGroup.Axis.Horizontal ? typeof(HorizontalLayoutGroup) : typeof(VerticalLayoutGroup); childContent = new GameObject(name + "_content", typeof(RectTransform), type).transform; childContent.transform.SetParent(transform.parent, false); childContent.SetSiblingIndex(transform.GetSiblingIndex() + 1); var group = childContent.GetComponent <HorizontalOrVerticalLayoutGroup>(); group.childForceExpandHeight = false; group.childForceExpandWidth = false; group.spacing = rule.spacing; } }
public TreeSelectItem[] CreateTreeSelectItems(GridLayoutGroup.Axis axis, TreeNode[] childNodes) { var rule = ruleGetter(deepth); created = new TreeSelectItem[childNodes.Length]; for (int i = 0; i < childNodes.Length; i++) { var item = pool.GetPoolObject(prefab.gameObject, parent, false); TreeSelectItem tsi = item.GetComponent <TreeSelectItem>(); tsi.InitTreeSelecter(axis, deepth + 1, ruleGetter, childNodes[i], prefab); created[i] = tsi; } return(created); }
/// <summary> /// 获取layout 尺寸大小 /// </summary> protected Vector2 UF_GetLayoutSizeDelta(GridLayoutGroup.Axis axis) { float sizeVal = 0; //更新content尺寸 if (axis == GridLayoutGroup.Axis.Vertical) { sizeVal = m_Padding.y * 2 + (m_Space.y + m_CellSize.y) * Mathf.Ceil((float)m_TotalCount / (float)m_Constraint) - m_Space.y; return(new Vector2(this.rectTransform.sizeDelta.x, sizeVal)); } else { sizeVal = m_Padding.y * 2 + (m_Space.y + m_CellSize.y) * Mathf.Ceil((float)m_TotalCount / (float)m_Constraint) - m_Space.y; return(new Vector2(sizeVal, this.rectTransform.sizeDelta.y)); } }
protected override void DrawFields() { base.DrawFields(); UIRecycleGrid grid = target as UIRecycleGrid; int maxCount = EditorGUILayout.IntField("maxShowCount", grid.maxShowCount); GridLayoutGroup.Axis layoutAxis = (GridLayoutGroup.Axis)EditorGUILayout.EnumPopup("Axis", grid.layoutAxis); if (GUI.changed) { EditorTools.RegisterUndo("UIRecycleGrid", grid); grid.maxShowCount = maxCount; grid.layoutAxis = layoutAxis; EditorTools.SetDirty(grid); } }
//计算指定索引位置 protected Vector2 UF_GetPositionBaseIndex(GridLayoutGroup.Axis axis, int index) { int left = 0; int down = 0; if (axis == GridLayoutGroup.Axis.Vertical) { left = (index) % m_Constraint; down = (int)((index) / m_Constraint); } else { down = (index) % m_Constraint; left = (int)((index) / m_Constraint); } return(new Vector2(left * (m_Space.x + m_CellSize.x) + m_Padding.x, -down * (m_Space.y + m_CellSize.y) - m_Padding.y)); }
//计算容器行列 private void CalculateRC() { RectTransform sForm = gameObject.GetComponent <RectTransform>(); _layoutGroup = _container.gameObject.GetComponent <GridLayoutGroup>(); _startAxis = _layoutGroup.startAxis; float height = sForm.sizeDelta.y; float width = sForm.sizeDelta.x; if (IsAxisHorizontal()) { //水平排列 垂直滚动 左右 height += _layoutGroup.spacing.y; width = width - _layoutGroup.padding.left - _layoutGroup.padding.right; width = width > _layoutGroup.cellSize.x ? width : _layoutGroup.cellSize.x; } else { //垂直排列 水平滚动 高度上下扣除 width += _layoutGroup.spacing.x; height = height - _layoutGroup.padding.top - _layoutGroup.padding.bottom; height = height > _layoutGroup.cellSize.y ? height : _layoutGroup.cellSize.y; } _row = (int)Mathf.Ceil(height * 1.0f / (_layoutGroup.cellSize.y + _layoutGroup.spacing.y)); _column = (int)Mathf.Ceil(width * 1.0f / (_layoutGroup.cellSize.x + _layoutGroup.spacing.x)); if (IsAxisHorizontal()) { //水平方向铺排(放置满一行 换行) _row++; } else { //垂直方向铺排 _column++; } _initMax = _row * _column; }
public void InitTreeSelecter(GridLayoutGroup.Axis axis, int deepth, Func <int, TreeSelectRule> ruleget, TreeNode node, TreeSelectItem prefab) { this.deepth = deepth; this.node = node; this.rule = ruleget(deepth); if (node.childern != null && node.childern.Count > 0) { InitContent(axis); creater = new TreeNodeCreater(ruleget, deepth, childContent, prefab); var items = creater.CreateTreeSelectItems(axis, node.childern.ToArray()); foreach (var item in items) { item.onSelection = OnSelection; } } ChargeRule(); }
private void SetScrollDirection(ListScrollType scrollType) { switch (scrollType) { case ListScrollType.Horizontal: horizontal = true; vertical = false; m_StartAxis = GridLayoutGroup.Axis.Vertical; break; case ListScrollType.Vertical: horizontal = false; vertical = true; m_StartAxis = GridLayoutGroup.Axis.Horizontal; break; default: break; } SetDirty(); }
public void SetGridGroup(GridLayoutGroup grid, RectOffset offset, Vector2 size, Vector2 space, int count, GridLayoutGroup.Constraint constr = GridLayoutGroup.Constraint.Flexible, GridLayoutGroup.Corner starC = GridLayoutGroup.Corner.UpperLeft , TextAnchor childA = TextAnchor.UpperLeft, GridLayoutGroup.Axis starA = GridLayoutGroup.Axis.Horizontal ) { if (!isHaveUIGrid) { Debug.Log("not set grid"); return; } Debug.Log("set grid"); grid.padding = offset; grid.cellSize = size; grid.spacing = space; grid.startCorner = starC; grid.startAxis = starA; grid.childAlignment = childA; grid.constraint = constr; if (constr == GridLayoutGroup.Constraint.FixedColumnCount) { grid.constraintCount = count; } }
public GridLayoutGroup ConstructLayoutGroup(float cellX = 350f, float cellY = 75f, float spaceX = 145f, float spaceY = 12f, float w = 1190, float h = 185, GridLayoutGroup.Axis startAxis = GridLayoutGroup.Axis.Horizontal, TextAnchor anchor = TextAnchor.MiddleCenter) { GameObject layout = new GameObject("LayoutGroup"); layout.AddComponent <RectTransform>(); GridLayoutGroup group = layout.AddComponent <GridLayoutGroup>(); group.cellSize = new Vector2(cellX, cellY); group.spacing = new Vector2(spaceX, spaceY); group.startAxis = startAxis; group.childAlignment = anchor; SetPosition(layout, 0, 0, w, h); return(layout.GetComponent <GridLayoutGroup>()); }
public static ScrollRect newScrollView(Transform parent, string strName, Vector3 pos, Vector2 size, Vector2 sizeContent, Vector2 spacingContent, GridLayoutGroup.Axis axis, TextAnchor childAlignment, GridLayoutGroup.Constraint constraint, int constraintCount) { var scrollRect = newGameObject <ScrollRect>(parent, strName, pos, size); var viewport = newGameObject <Mask>(scrollRect.transform, "Viewport", Vector3.zero, size); var content = newGameObject <GridLayoutGroup>(viewport.transform, "Content", Vector3.zero, size); content.cellSize = sizeContent; content.spacing = spacingContent; content.startAxis = axis; content.childAlignment = childAlignment; content.constraint = constraint; content.constraintCount = constraintCount; scrollRect.content = content.GetComponent <RectTransform>(); return(scrollRect); }
private int CaculateDataIndex(Vector2Int rowColumnIndex, Vector2Int rowColumnSize, GridLayoutGroup.Axis startAxis, GridLayoutGroup.Corner startCorner) { // for row column index // for temp row column indes // x -> index on horizontal axis // y -> index on vertical axis // for row column size // x -> element amount on horizontal axis // y -> element amount on vertical axis // tempIndex and rowColumn size are all start from topLeft int result = 0; if (startAxis == GridLayoutGroup.Axis.Horizontal) { switch (startCorner) { case GridLayoutGroup.Corner.UpperLeft: result = rowColumnIndex.y * rowColumnSize.x + rowColumnIndex.x; break; case GridLayoutGroup.Corner.LowerLeft: result = (rowColumnSize.y - rowColumnIndex.y - 1) * rowColumnSize.x + rowColumnIndex.x; break; case GridLayoutGroup.Corner.UpperRight: result = rowColumnIndex.y * rowColumnSize.x + rowColumnSize.x - rowColumnIndex.x - 1; break; case GridLayoutGroup.Corner.LowerRight: result = (rowColumnSize.y - rowColumnIndex.y - 1) * rowColumnSize.x + rowColumnSize.x - rowColumnIndex.x - 1; break; default: Debug.LogError("start corner type error", this.gameObject); break; } } else //if (startAxis == GridLayoutGroup.Axis.Vertical) { switch (startCorner) { case GridLayoutGroup.Corner.UpperLeft: result = rowColumnIndex.x * rowColumnSize.y + rowColumnIndex.y; break; case GridLayoutGroup.Corner.LowerLeft: result = rowColumnIndex.x * rowColumnSize.y + rowColumnSize.y - rowColumnIndex.y - 1; break; case GridLayoutGroup.Corner.UpperRight: result = (rowColumnSize.x - rowColumnIndex.x - 1) * rowColumnSize.y + rowColumnIndex.y; break; case GridLayoutGroup.Corner.LowerRight: result = (rowColumnSize.x - rowColumnIndex.x - 1) * rowColumnSize.y + rowColumnSize.y - rowColumnIndex.y - 1; break; default: Debug.LogError("start corner type error", this.gameObject); break; } } return(result); }
public static DialogGUIGridLayout GUIGridLayout(RectOffset padding, Vector2 cellSize, Vector2 spacing, GridLayoutGroup.Corner startCorner, GridLayoutGroup.Axis startAxis, TextAnchor childAligment, GridLayoutGroup.Constraint constraint, Int32 constraintCount, Action optionBuilder, Modifier <DialogGUIGridLayout> modifier = null) { DialogGUIGridLayout element = new DialogGUIGridLayout(padding, cellSize, spacing, startCorner, startAxis, childAligment, constraint, constraintCount, Declare(optionBuilder)); if (modifier != null) { element = modifier(element); } _elements.Add(element); return(element); }