private int GetMoveCurveFactorCount(ScrollViewItem preCenterItem, ScrollViewItem newCenterItem) { SortEnhanceItem(); int factorCount = Mathf.Abs(newCenterItem.RealIndex) - Mathf.Abs(preCenterItem.RealIndex); return(Mathf.Abs(factorCount)); }
// On Drag End public void OnDragEnhanceViewEnd() { // find closed item to be centered int closestIndex = 0; float value = (curHorizontalValue - (int)curHorizontalValue); float min = float.MaxValue; float tmp = 0.5f * (curHorizontalValue < 0 ? -1 : 1); for (int i = 0; i < listEnhanceItems.Count; i++) { float dis = Mathf.Abs(Mathf.Abs(value) - Mathf.Abs((tmp - listEnhanceItems[i].CenterOffSet))); if (dis < min) { closestIndex = i; min = dis; } } originHorizontalValue = curHorizontalValue; float target = ((int)curHorizontalValue + (tmp - listEnhanceItems[closestIndex].CenterOffSet)); preCenterItem = curCenterItem; curCenterItem = listEnhanceItems[closestIndex]; LerpTweenToTarget(originHorizontalValue, target, true); canChangeItem = false; }
// sort ------------------------------------------------------------------------------------------- void Sort() { int count = itemList.Count; long[] _uid_list = new long[count]; // 현재 리스트의 정렬할 대상 아이디 추가. for (int i = 0; i < count; i++) { _uid_list[i] = itemList[i].uid; } // 특정 기준으로 아이디 정렬. SortByOrder(0, _uid_list); //for (int i = 0; i < count; i++) print("" + _uid_list[i]); // 정렬된 _uid_list 순서대로 리스트 추가 작업. itemList.Clear(); for (int i = 0; i < count; i++) { long uid = _uid_list[i]; ScrollViewItem item = new ScrollViewItem(); item.uid = uid; AddItem(item, this); } }
public void Setup(ScrollViewItem currentItem, ScrollViewList currentScrollList) { item = currentItem; scrollList = currentScrollList; m_uid = item.uid; m_text.text = item.name; }
void Start() { for (int i = 0; i < element.Length; i++) { ScrollViewItem item = new ScrollViewItem(); item.uid = i; item.name = "item" + i; element[i].Setup(item, null); } }
public void init(ScrollViewItem prefab) { itemPrefab = prefab; itemH = itemPrefab.transform.GetComponent <RectTransform>().rect.height; var viewH = _viewport.rect.height; spawnCount = Convert.ToInt32(Mathf.Floor(viewH / itemH)) * 2 + 1; UpdatePool(spawnCount); }
private void RemoveItem(ScrollViewItem itemToRemove, ScrollViewList scrollList) { for (int i = scrollList.itemList.Count - 1; i >= 0; i--) { if (scrollList.itemList[i] == itemToRemove) { scrollList.itemList.RemoveAt(i); } } }
/// /// Update EnhanceItem state with curve fTime value /// public void UpdateEnhanceScrollView(float fValue) { for (int i = 0; i < listEnhanceItems.Count; i++) { ScrollViewItem itemScript = listEnhanceItems[i]; float xValue = GetXPosValue(fValue, itemScript.CenterOffSet); float scaleValue = GetScaleValue(fValue, itemScript.CenterOffSet); float depthCurveValue = depthCurve.Evaluate(fValue + itemScript.CenterOffSet); itemScript.UpdateScrollViewItems(xValue, depthCurveValue, depthFactor, listEnhanceItems.Count, yFixedPositionValue, scaleValue); } }
public ScrollViewItem GetCellView(InfinateScroll scroller, int dataIndex, int cellIndex) { ScrollViewItem cellView = scroller.GetCellView(prefab); if (cellView == null) { return(null); } cellView.GetComponentInChildren <Text>().text = datas[dataIndex]; cellView.gameObject.SetActive(true); return(cellView); }
private void AddButtons() { for (int i = 0; i < itemList.Count; i++) { ScrollViewItem item = itemList[i]; GameObject newButton = ObjectPool.GetObject(); //Pool에서 가져온다. newButton.transform.SetParent(contentPanel); newButton.transform.localPosition = Vector3.zero; newButton.transform.localScale = Vector3.one; ScrollViewElement element = newButton.GetComponent <ScrollViewElement>(); element.Setup(item, this); // 초기화. } }
void Start() { canChangeItem = true; int count = listEnhanceItems.Count; dFactor = (Mathf.RoundToInt((1f / count) * 10000f)) * 0.0001f; mCenterIndex = count / 2; if (count % 2 == 0) { mCenterIndex = count / 2 - 1; } int index = 0; for (int i = count - 1; i >= 0; i--) { listEnhanceItems[i].CurveOffSetIndex = i; listEnhanceItems[i].CenterOffSet = dFactor * (mCenterIndex - index); listEnhanceItems[i].SetSelectState(false); GameObject obj = listEnhanceItems[i].gameObject; DragView script = obj.GetComponent <DragView>(); if (script != null) { script.SetScrollView(this); } index++; } // set the center item with startCenterIndex if (startCenterIndex < 0 || startCenterIndex >= count) { Debug.LogError("## startCenterIndex < 0 || startCenterIndex >= listEnhanceItems.Count out of index ##"); startCenterIndex = mCenterIndex; } // sorted items listSortedItems = new List <ScrollViewItem>(listEnhanceItems.ToArray()); totalHorizontalWidth = cellWidth * count; curCenterItem = listEnhanceItems[startCenterIndex]; curHorizontalValue = 0.5f - curCenterItem.CenterOffSet; LerpTweenToTarget(0f, curHorizontalValue, false); // // enable the drag actions // EnableDrag(true); }
// Update is called once per frame void Update() { if (itemList.Count <= 0) { return; } float moveDis = sv.transform.localPosition.y - svLastPos; if (Mathf.Abs(moveDis) > 0.05) { bool isup = moveDis > 0; if (isup) { while (itemList [0].transform.localPosition.y + sv.transform.localPosition.y > maxHeight && itemList [itemList.Count - 1].data.index < itemDataList.Count - 1) { ScrollViewItem item = itemList [0]; item.SetData(itemDataList [itemList [itemList.Count - 1].data.index + 1]); itemList.Add(item); itemList.RemoveAt(0); item.transform.localPosition = itemList[itemList.Count - 2].transform.localPosition - new Vector3(0, grid.cellHeight, 0); } } else { while (itemList [itemList.Count - 1].transform.localPosition.y + sv.transform.localPosition.y < minHeight && itemList [0].data.index > 0) { ScrollViewItem item = itemList [itemList.Count - 1]; item.SetData(itemDataList [itemList [0].data.index - 1]); itemList.Insert(0, item); itemList.RemoveAt(itemList.Count - 1); item.transform.localPosition = itemList[1].transform.localPosition + new Vector3(0, grid.cellHeight, 0); } } svLastPos = sv.transform.localPosition.y; } }
// Use this for initialization public void Init(List <ScrollViewItemData> dataList) { for (int i = 0; i < itemList.Count; i++) { MonoBehaviour.Destroy(itemList[i].gameObject); } itemList.Clear(); itemDataList = dataList; sv = transform.GetComponent <UIScrollView> (); grid = transform.Find("Grid").GetComponent <UIGrid>(); Vector2 viewsize = transform.GetComponent <UIPanel> ().GetViewSize(); int count = (int)(viewsize.y / grid.cellHeight + 2); for (int i = 0; i < count; i++) { if (itemDataList.Count <= i) { break; } GameObject obj = NGUITools.AddChild(grid.gameObject, listItem); ScrollViewItem item = obj.GetComponent <ScrollViewItem>(); itemList.Add(item); item.SetData(itemDataList[i]); } grid.repositionNow = true; //grid.Reposition(); sv.ResetPosition(); svLastPos = grid.transform.localPosition.y; maxHeight = viewsize.y / 2 + grid.cellHeight / 2; minHeight = -maxHeight; }
public void SetHorizontalTargetItemIndex(ScrollViewItem selectItem) { if (!canChangeItem) { return; } if (curCenterItem == selectItem) { return; } canChangeItem = false; preCenterItem = curCenterItem; curCenterItem = selectItem; // calculate the direction of moving float centerXValue = positionCurve.Evaluate(0.5f) * totalHorizontalWidth; bool isRight = false; if (selectItem.transform.localPosition.x > centerXValue) { isRight = true; } // calculate the offset * dFactor int moveIndexCount = GetMoveCurveFactorCount(preCenterItem, selectItem); float dvalue = 0.0f; if (isRight) { dvalue = -dFactor * moveIndexCount; } else { dvalue = dFactor * moveIndexCount; } float originValue = curHorizontalValue; LerpTweenToTarget(originValue, curHorizontalValue + dvalue, true); }
// Use this for initialization void Start() { //初始化测试数据 for (int i = 0; i < 20; i++) { itemDataList.Add(new ScrollViewItemData(i, "第" + i + "个元素")); } sv = transform.GetComponent <UIScrollView> (); grid = transform.Find("Grid").GetComponent <UIGrid>(); Vector2 viewsize = transform.GetComponent <UIPanel> ().GetViewSize(); int count = (int)(viewsize.y / grid.cellHeight + 2); Debug.Log(count); for (int i = 0; i < count; i++) { if (itemDataList.Count <= i) { break; } GameObject o = Resources.Load("Prefabs/ScrollViewItem") as GameObject; GameObject obj = NGUITools.AddChild(grid.gameObject, o); ScrollViewItem item = obj.GetComponent <ScrollViewItem>(); itemList.Add(item); item.SetData(itemDataList[i]); } grid.repositionNow = true; grid.Reposition(); svLastPos = grid.transform.localPosition.y; maxHeight = viewsize.y / 2 + grid.cellHeight / 2; minHeight = -maxHeight; }
// sort item with X so we can know how much distance we need to move the timeLine(curve time line) static public int SortPosition(ScrollViewItem a, ScrollViewItem b) { return(a.transform.localPosition.x.CompareTo(b.transform.localPosition.x)); }
void AddItem(ScrollViewItem itemToAdd, ScrollViewList scrollList) { scrollList.itemList.Add(itemToAdd); }