Example #1
0
 private void ScrollUpdate()
 {
     curTimes--;
     if (curTimes < 0)
     {
         lastMainItem = _allItem[mainIndex];
         SetMainItemRender(lastMainItem, true);
         changeFun.DynamicInvoke(_allItem[mainIndex].Data);
         isMoving = false;
         return;
     }
     for (int i = _allItem.Count - 1; i >= 0; i--)
     {
         CItemRender item = _allItem[i];
         if (isNext)
         {
             Vector3 nextPos = new Vector3(item.x + itemWidth, item.y, item.z);
             iTween.MoveTo(item.go, iTween.Hash("position", nextPos, "isLocal", true, "speed", speed * (curTimes + 1), "easetype", iTween.EaseType.linear, "oncomplete", "AfterScrollUpdate", "oncompletetarget", this));
         }
         else
         {
             Vector3 nextPos = new Vector3(item.x - itemWidth, item.y, item.z);
             iTween.MoveTo(item.go, iTween.Hash("position", nextPos, "isLocal", true, "speed", speed * (curTimes + 1), "easetype", iTween.EaseType.linear, "oncomplete", "AfterScrollUpdate", "oncompletetarget", this));
         }
     }
 }
Example #2
0
 private void OnMoveUp(CItemRender item, TweenAlpha tween)
 {
     if (tween != null)
     {
         UnityEngine.Object.DestroyImmediate(tween);
     }
     item.GetComponent <UIWidget>().alpha = 1;
     item.go.SetActive(false);
     firstMoveItemIndex = _allItem.IndexOf(item);
     if (_allItem.Count > firstMoveItemIndex + 1)
     {
         CItemRender firstItem = _allItem[firstMoveItemIndex + 1];
         float       offY      = item.y - firstItem.y;
         for (int n = firstMoveItemIndex, len = _allItem.Count; n < len; n++)
         {
             CItemRender tempItem = _allItem[n];
             //tempItem.SetParent(firstItem.tran);
             iTween.Stop(tempItem.go);
             Hashtable hash = iTween.Hash("y", tempItem.y + offY, "time", 0.5f, "islocal", true);
             iTween.MoveTo(tempItem.go, hash);
         }
         //Hashtable hash = iTween.Hash("y", item.y, "time", 0.5f, "islocal", true);
         //iTween.MoveTo(firstItem.go, hash);
     }
     doneKey = UILoopManager.SetTimeout(OnDown, 0.6f);
 }
Example #3
0
        private void ResetItems()
        {
            CItemRender item;

            for (int i = 0; i < _allItem.Count; i++)
            {
                item      = _allItem[i];
                item.name = "Item" + i;
                CItemRender w = item;
                if (_dataCondition != null)
                {
                    w.SetCondition(_dataCondition);
                }
                w.Data = _dataProvider[i];

                float itemX, itemY;
                //一列一列的顺序?
                itemY = content.baseClipRegion.w / 2 + content.baseClipRegion.y + offY;
                itemX = i * itemWidth;
                item.tran.localPosition = new Vector3(itemX, itemY, 0);
                List <BoxCollider> boxList = DisplayUtil.GetComponentByType <BoxCollider>(item.go);
                for (int n = 0, len = boxList.Count; n < len; n++)
                {
                    EventUtil.AddHover(boxList[n].gameObject, OnHover, item);
                }
            }
        }
Example #4
0
        private void OnSliceOut(CItemRender item)
        {
            UILoopManager.ClearTimeout(doneKey);
            Hashtable hash = iTween.Hash("x", width, "time", fadeTime, "islocal", true);

            iTween.MoveTo(item.go, hash);
            deplayKeyList.Add(UILoopManager.SetTimeout <CItemRender, TweenAlpha>(OnMoveUp, fadeTime, item, null));
        }
Example #5
0
        private void OnFadeOut(CItemRender item)
        {
            UILoopManager.ClearTimeout(doneKey);
            var tween = TweenAlpha.Begin(item.go, fadeTime, 0f);

            listAlpha.Add(tween);
            deplayKeyList.Add(UILoopManager.SetTimeout <CItemRender, TweenAlpha>(OnMoveUp, fadeTime, item, tween));
        }
Example #6
0
        private void OnDoubleClickItem(object arg)
        {
            CItemRender c = arg as CItemRender;

            if (OnItemDoubleClick != null)
            {
                OnItemDoubleClick(c);
            }
        }
Example #7
0
 private int sortItem(CItemRender a, CItemRender b)
 {
     if (a.x < b.x)
     {
         return(-1);
     }
     if (a.x > b.x)
     {
         return(1);
     }
     return(0);
 }
Example #8
0
 private void RetrieveRender(CItemRender item)
 {
     //item = _allItem[_allItem.Count - 1];
     _allItem.Remove(item);
     _itemPool.Add(item);
     //item.SetParent(Recycle);
     //item.tran.localPosition = Vector3.zero;
     //item.SetActive(false);
     if (delayKey == -1)
     {
         delayKey = UILoopManager.SetTimeout(DelayRetrieveRender, 0.01f);
     }
 }
Example #9
0
 public void AfterScrollNext()
 {
     scrollNum++;
     //移动结束
     if (scrollNum >= _allItem.Count)
     {
         scrollNum = 0;
         //移到最后,要返回到最前面
         _allItem[_allItem.Count - 1].x = _allItem[0].x - itemWidth;
         _allItem.Sort(sortItem);
         isMoving     = false;
         lastMainItem = _allItem[mainIndex];
         SetMainItemRender(lastMainItem, true);
         changeFun.DynamicInvoke(_allItem[mainIndex].Data);
     }
 }
Example #10
0
 public void ScrollNext(GameObject obj)
 {
     //正在移动被点击时,直接重置
     if (isMoving)
     {
         return;
     }
     SetMainItemRender(lastMainItem, false);
     for (int i = _allItem.Count - 1; i >= 0; i--)
     {
         CItemRender item    = _allItem[i];
         Vector3     nextPos = new Vector3(item.x + itemWidth, item.y, item.z);
         iTween.MoveTo(item.go, iTween.Hash("position", nextPos, "isLocal", true, "speed", speed, "easetype", iTween.EaseType.easeInOutSine, "oncomplete", "AfterScrollNext", "oncompletetarget", this));
     }
     isMoving = true;
 }
Example #11
0
 private void OnItemPress(GameObject go, bool isPressed, bool needEvent)
 {
     if (isPressed)
     {
         CItemRender c = go.GetDisplayObj() as CItemRender;
         SelectedItem = c.Data;
         if (spSelected != null)
         {
             spSelected.transform.localPosition = c.tran.localPosition;
         }
         if (OnItemSelect != null && needEvent)
         {
             OnItemSelect(c);
         }
     }
 }
Example #12
0
 private void SetMainItemRender(CItemRender item, bool flag)
 {
     mainBorder.gameObject.SetActive(flag);
     if (flag)
     {
         item.height = mainSizeY;
         item.width  = mainSizeX;
         //mainBorder.pivot = UIWidget.Pivot.Center;
         //mainBorder.transform.localPosition = new Vector3(item.x + item.width / 2, item.y - item.height / 2);
     }
     else
     {
         item.height = oriSizeY;
         item.width  = oriSizeX;
     }
 }
Example #13
0
        public void SetDataProvider <T>(IEnumerable <T> value)
        {
            if (IsSame <T>(_dataProvider, value))
            {
                return;
            }
            _dataProvider = _dataProvider ?? new List <object>();
            while (_dataProvider.Count > 0)
            {
                _dataProvider.RemoveAt(0);
            }
            if (value == null)
            {
                return;
            }
            foreach (var t in value)
            {
                _dataProvider.Add(t);
            }

            int curLen = _dataProvider.Count;

            for (var i = 0; i < curLen; i++)
            {
                CItemRender item;
                if (_itemPool.Count < curLen)
                {
                    item      = (CItemRender)Activator.CreateInstance(_itemRender);
                    item.name = "Item" + i;
                    _itemPool.Add(item);
                }
                else
                {
                    item = _itemPool[i];
                }
                item.Data = _dataProvider[i];
                item.SetParent(gameObject);
                item.SetActive(true);
            }
            for (var i = curLen; i < _itemPool.Count; i++)
            {
                CItemRender item = _itemPool[i];
                item.SetActive(false);
            }
            Reposition();
        }
Example #14
0
        private void ResetItems()
        {
            CItemRender item;

            for (int i = 0; i < _allItem.Count; i++)
            {
                item      = _allItem[i];
                item.name = "Item" + i;
                CItemRender w = item;
                w.Data = _dataProvider[i];

                float itemX, itemY;
                //一列一列的顺序?
                itemY = content.baseClipRegion.w / 2 + content.baseClipRegion.y + offY;
                itemX = (i - 1) * itemWidth;
                item.tran.localPosition = new Vector3(itemX, itemY, 0);
            }
        }
Example #15
0
 public void RemoveItem(CItemRender item)
 {
     if (item != null)
     {
         if (delList.Contains(item) == false)
         {
             delList.Add(item);
         }
         dataProvider.Remove(item.Data);
     }
     if (useFade)
     {
         OnFadeOut(item);
     }
     else
     {
         OnSliceOut(item);
     }
 }
Example #16
0
        protected virtual void OnItemPress(GameObject go, bool needEvent)
        {
            CItemRender c = go.GetDisplayObj() as CItemRender;

            if (selectedItemRender != null)
            {
                selectedItemRender.SetSelected(false);
            }
            selectedItemRender = c;
            c.SetSelected(true);
            SelectedItem = c.Data;
            if (spSelected != null)
            {
                spSelected.transform.localPosition = c.tran.localPosition;
            }
            if (OnItemSelect != null && needEvent)
            {
                OnItemSelect(c);
            }
        }
Example #17
0
        private void InitCellRender(bool SetData = true)
        {
            int         rowNum    = Convert.ToInt32(Mathf.Ceil(this.height / (float)itemHeight));
            int         renderNum = Math.Min(_dataProvider.Count, rowNum * ColNum);
            bool        isEnough  = _allItem.Count >= renderNum;
            int         n         = Mathf.Abs(_allItem.Count - renderNum);
            CItemRender item;

            while (n > 0)
            {
                if (isEnough == true)
                {
                    item = _allItem[_allItem.Count - 1];
                    RetrieveRender(item);
                }
                else
                {
                    item = GetOneRender();
                    _allItem.Add(item);
                    item.SetParent(Content.transform);
                }
                n--;
            }

            if (SetData == true || isEnough == false)
            {
                for (int i = 0; i < _allItem.Count; i++)
                {
                    item      = _allItem[i];
                    item.name = "Item" + i;
                    CItemRender w = item;
                    w.Data = _dataProvider[i];
                    int   offY  = i / ColNum;
                    float itemY = (offY * _itemHeight * -1);
                    float itemX = (itemWidth) * (i % ColNum);
                    item.tran.localPosition = new Vector3(PaddingLeft + itemX, -PaddingTop + itemY, 0);
                }
                firstPoint = 0;
                lastPoint  = renderNum - 1;
            }
        }
Example #18
0
        private void OnLoop()
        {
            if ((stopOnOver && IsItemOver()) || isStop)
            {
                return;
            }
            float leftX  = content.baseClipRegion.x - content.baseClipRegion.z / 2 + offSetLeft;
            float rightX = content.baseClipRegion.z / 2 + content.baseClipRegion.x + offSetRight;

            for (int i = _allItem.Count - 1; i >= 0; i--)
            {
                CItemRender item = _allItem[i];
                item.x -= speed;
                if (item.x < leftX)
                {
                    float offX = leftX - item.x;
                    item.x  = Math.Max(rightX, _allItem[_allItem.Count - 1].x + itemWidth);
                    item.x += offX;
                }
            }
            _allItem.Sort(sortItem);
        }
Example #19
0
 private void StopMove()
 {
     delList.Clear();
     if (_allItem != null)
     {
         for (int n = 0, len = _allItem.Count; n < len; n++)
         {
             CItemRender tempItem = _allItem[n];
             //tempItem.SetParent(firstItem.tran);
             iTween.Stop(tempItem.go);
         }
     }
     if (_itemPool != null)
     {
         for (int n = 0, len = _itemPool.Count; n < len; n++)
         {
             CItemRender tempItem = _itemPool[n];
             //tempItem.SetParent(firstItem.tran);
             iTween.Stop(tempItem.go);
         }
     }
     for (int i = 0, len = listAlpha.Count; i < len; i++)
     {
         if (listAlpha[i])
         {
             UnityEngine.Object.DestroyImmediate(listAlpha[i]);
         }
     }
     for (int r = 0, len = listAlpha.Count; r < len; r++)
     {
         UILoopManager.ClearTimeout(deplayKeyList[r]);
     }
     listAlpha.Clear();
     deplayKeyList.Clear();
     UILoopManager.ClearTimeout(doneKey);
 }
Example #20
0
        private void CheckShowItem(bool resetData = false)
        {
            float offY = Content.transform.localPosition.y;

            for (int i = _allItem.Count - 1; i >= 0; i--)
            {
                CItemRender item = _allItem[i];
                if ((-item.y + itemHeight) <= offY || (offY + this.height) <= (-item.y))
                {
                    RetrieveRender(item);
                }
            }
            int n             = int.Parse(Mathf.Floor(offY / itemHeight).ToString());
            int nowFirstPoint = n * ColNum;

            n = int.Parse(Mathf.Ceil((this.height + offY) / (float)itemHeight).ToString());
            int nowLastPoint = ColNum * n - 1;

            nowLastPoint = Mathf.Max(0, nowLastPoint);
            nowLastPoint = Math.Min(nowLastPoint, _dataProvider.Count - 1);



            if (nowLastPoint > lastPoint)
            {
                int needItemNum = nowLastPoint - lastPoint;
                for (int i = 1; i <= needItemNum; i++)
                {
                    int index = lastPoint + i;
                    if (_dataProvider.Count <= index)
                    {
                        continue;
                    }
                    CItemRender item = GetOneRender();
                    item.Data = _dataProvider[index];
                    int   offYIndex = index / ColNum;
                    float itemY     = (offYIndex * _itemHeight * -1);
                    float itemX     = (itemWidth) * ((i - 1) % ColNum);
                    item.tran.localPosition = new Vector3(PaddingLeft + itemX, -PaddingTop + itemY, 0);
                    _allItem.Add(item);
                }
            }
            if (nowLastPoint == lastPoint && nowFirstPoint == firstPoint && (nowLastPoint - nowFirstPoint + 1) > _allItem.Count)
            {
                int needItemNum = (nowLastPoint - nowFirstPoint + 1) - _allItem.Count;
                for (int i = 1; i <= needItemNum; i++)
                {
                    int index = lastPoint - needItemNum + i;
                    if (_dataProvider.Count <= index)
                    {
                        continue;
                    }
                    CItemRender item = GetOneRender();
                    item.Data = _dataProvider[index];
                    int   offYIndex = index / ColNum;
                    float itemY     = (offYIndex * _itemHeight * -1);
                    float itemX     = (itemWidth) * ((i - 1) % ColNum);
                    item.tran.localPosition = new Vector3(PaddingLeft + itemX, -PaddingTop + itemY, 0);
                    _allItem.Add(item);
                }
            }
            if (nowFirstPoint < firstPoint)
            {
                int needItemNum = firstPoint - nowFirstPoint;
                for (int i = 1; i <= needItemNum; i++)
                {
                    int index = firstPoint - i;
                    if (_dataProvider.Count <= index)
                    {
                        continue;
                    }
                    CItemRender item = GetOneRender();
                    item.Data = _dataProvider[index];
                    int   offYIndex = index / ColNum;
                    float itemY     = (offYIndex * _itemHeight * -1);
                    float itemX     = (itemWidth) * (ColNum - ((i - 1) % ColNum) - 1);
                    item.tran.localPosition = new Vector3(PaddingLeft + itemX, -PaddingTop + itemY, 0);
                    _allItem.Insert(0, item);
                }
            }
            firstPoint = nowFirstPoint;
            lastPoint  = nowLastPoint;

            if (resetData)
            {
                for (int i = 0; i <= lastPoint - firstPoint; i++)
                {
                    CItemRender item = _allItem[i];
                    item.Data = _dataProvider[firstPoint + i];
                }
            }
        }
Example #21
0
 private int GetItemIndex(CItemRender item)
 {
     return(_dataProvider.IndexOf(item.Data));
 }
Example #22
0
        protected virtual void ResetItems()
        {
            CItemRender item;

            for (int i = 0; i < _allItem.Count; i++)
            {
                item      = _allItem[i];
                item.name = "Item" + i;
                CItemRender w = item;
                if (item.IsActive() == false)
                {
                    item.SetActive(true);
                }
                w.SetAlpha(1);
                if (_dataCondition != null)
                {
                    w.SetCondition(_dataCondition);
                }
                w.index = i + preIndex;
                w.Data  = _dataProvider[i];
                int   offX = i / RowNum;
                int   offY = i / ColNum;
                float itemX, itemY;
                if (_horizon)
                {
                    itemY = -(itemHeight + gapV) * (i % RowNum); //一列一列的顺序?
                    itemX = offX * (itemWidth + gapU);
                }
                else
                {
                    itemY = (offY * (_itemHeight * item.localScale.y + gapV) * -1);
                    itemX = (itemWidth + gapU) * (i % ColNum);
                }
                item.tran.localPosition = new Vector3(PaddingLeft + itemX, -PaddingTop + itemY, 0);

                //                UIEventListener listener = UIEventListener.Get(item.go);
                UIEventListener.Get(item.go);
                //listener.onHover = OnItemHover;
                if (IsAddItemEvent == true)
                {
                    EventUtil.AddHover(item.go, OnItemHover, item.go);
                    EventUtil.AddDoubleClick(item.go, OnDoubleClickItem, item);
                    EventUtil.AddClick(item.go, OnItemPress, item.go);
                }
                else
                {
                    EventUtil.RemoveHover(item.go, OnItemHover);
                    EventUtil.RemoveDoubleClick(item.go, OnDoubleClickItem);
                    EventUtil.RemoveClick(item.go, OnItemPress);
                }
            }
            if (_dataProvider == null)
            {
                TotalWidth  = 0;
                TotalHeight = 0;
            }
            else
            {
                if (_horizon)
                {
                    var itemW = (_itemWidth + gapU) * Mathf.CeilToInt(_dataProvider.Count / (float)RowNum) - gapU;
                    TotalWidth = PaddingLeft * 2 + itemW;
                }
                else
                {
                    var itemH = (_itemHeight + gapV) * Mathf.CeilToInt(_dataProvider.Count / (float)ColNum) - gapV;
                    TotalHeight = PaddingTop + itemH + PaddingBottom;
                }
            }
            UpdateScrollBar();
        }
Example #23
0
        protected override void ResetItems()
        {
            CItemRender item;
            bool        isSameHeight    = true;
            float       realTotalHeight = 0;

            for (int i = 0; i < _allItem.Count; i++)
            {
                item      = _allItem[i];
                item.name = "Item" + i;
                CItemRender w = item;
                if (_dataCondition != null)
                {
                    w.SetCondition(_dataCondition);
                }
                w.Data = _dataProvider[i];
                //默认为itemHeight(等高情况)
                //不等高情况,请自行设置CItemRender的height属性
                float realItemHeight = 0;
                if (w.height == 0)
                {
                    realItemHeight = _itemHeight;
                }
                else
                {
                    realItemHeight = w.height;
                    isSameHeight   = false;
                }
                int   offX = i / RowNum;
                int   offY = i / ColNum;
                float itemX, itemY;
                if (horizon)
                {
                    itemY = -(itemHeight + 5) * (i % RowNum);  //一列一列的顺序?
                    itemX = offX * itemWidth;
                }
                else
                {
                    if (isSameHeight)
                    {
                        itemY = (offY * _itemHeight * -1);
                    }
                    else
                    {
                        itemY = (realTotalHeight * -1);
                    }
                    itemX = (itemWidth + 5) * (i % ColNum);
                }
                item.tran.localPosition = new Vector3(PaddingLeft + itemX, -PaddingTop + itemY, 0);

                realTotalHeight += realItemHeight;

                UIEventListener listener = UIEventListener.Get(item.go);
                //listener.onHover = OnItemHover;
                EventUtil.AddHover(item.go, OnItemHover, item.go);
                listener.onClick = OnItemPress;
            }
            if (_dataProvider == null)
            {
                TotalWidth  = 0;
                TotalHeight = 0;
            }
            else
            {
                if (horizon)
                {
                    var itemW = _itemWidth * _dataProvider.Count / (float)RowNum;
                    TotalWidth = PaddingLeft * 2 + Mathf.CeilToInt(itemW);
                }
                else
                {
                    float itemH = 0;
                    if (isSameHeight)
                    {
                        itemH = _itemHeight * _dataProvider.Count / float.Parse(ColNum.ToString());
                    }
                    else
                    {
                        itemH = realTotalHeight;
                    }
                    TotalHeight = PaddingTop + Mathf.CeilToInt(itemH) + PaddingBottom;
                }
            }
            if (keepCurPos == false)
            {
                UpdateScrollBar();
            }
            else
            {
                if (ShowBar)
                {
                    bool needShowBar = TotalHeight > height || TotalWidth > width;
                    Bar.gameObject.SetActive(needShowBar);
                }
                else
                {
                    Bar.gameObject.SetActive(false);
                }
            }
        }
Example #24
0
        public void SetDataProvider <T>(IEnumerable <T> value)
        {
            if (_itemRender == null)
            {
                Debug.LogError("set itemRender first!");
                return;
            }
            if (_itemPool == null)
            {
                _itemPool = new List <CItemRender>();
            }
            if (_allItem == null)
            {
                _allItem = new List <CItemRender>();
                btnLeft.AddClick(ScrollPre);
                btnRight.AddClick(ScrollNext);
            }
            SetData <T>(value);
            //_dataProvider = (value ?? new List<T>()) as List<object>;

            bool        isEnough = _allItem.Count >= _dataProvider.Count;
            int         n        = Mathf.Abs(_allItem.Count - _dataProvider.Count);
            CItemRender item;

            while (n > 0)
            {
                if (isEnough == true)
                {
                    item = _allItem[_allItem.Count - 1];
                    _itemPool.Add(item);
                    _allItem.RemoveAt(_allItem.Count - 1);
                    item.SetParent(recycle);
                    item.tran.localPosition = Vector3.zero;
                    item.SetActive(false);
                }
                else
                {
                    if (_itemPool.Count > 0)
                    {
                        item = _itemPool[0];
                        _itemPool.RemoveAt(0);
                        item.SetActive(true);
                    }
                    else
                    {
                        item = (CItemRender)Activator.CreateInstance(_itemRender);
                        EventUtil.AddHover(item, OnHover);
                        //item.width = itemWidth;
                    }
                    item.SetParent(_content.transform);
                    _allItem.Add(item);
                }
                n--;
            }
            ResetItems();
            lastDataProvider = value;
            lastMainItem     = _allItem[mainIndex];
            oriSizeX         = _allItem[mainIndex].width;
            oriSizeY         = _allItem[mainIndex].height;
            SetMainItemRender(lastMainItem, false);
        }