Esempio n. 1
0
    private int GetMoveCurveFactorCount(ScrollViewItem preCenterItem, ScrollViewItem newCenterItem)
    {
        SortEnhanceItem();
        int factorCount = Mathf.Abs(newCenterItem.RealIndex) - Mathf.Abs(preCenterItem.RealIndex);

        return(Mathf.Abs(factorCount));
    }
Esempio n. 2
0
    // 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;
    }
Esempio n. 3
0
    // 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);
        }
    }
Esempio n. 4
0
    public void Setup(ScrollViewItem currentItem, ScrollViewList currentScrollList)
    {
        item       = currentItem;
        scrollList = currentScrollList;

        m_uid       = item.uid;
        m_text.text = item.name;
    }
Esempio n. 5
0
 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);
     }
 }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
 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);
         }
     }
 }
Esempio n. 8
0
 ///
 /// 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);
     }
 }
Esempio n. 9
0
    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);
    }
Esempio n. 10
0
    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); // 초기화.
        }
    }
Esempio n. 11
0
    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);
    }
Esempio n. 12
0
    // 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;
        }
    }
Esempio n. 13
0
    // 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;
    }
Esempio n. 14
0
    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);
    }
Esempio n. 15
0
    // 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;
    }
Esempio n. 16
0
 // 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));
 }
Esempio n. 17
0
 void AddItem(ScrollViewItem itemToAdd, ScrollViewList scrollList)
 {
     scrollList.itemList.Add(itemToAdd);
 }