Beispiel #1
0
        public override void CalculateLayoutInputHorizontal()
        {
            if (ItemNum == items.Count)
            {
                return;
            }

            _isUpdatePos = false;
            items.Clear();
            rectChildren.Clear();

            for (int i = 0; i < rectTransform.childCount; i++)
            {
                var rect = rectTransform.GetChild(i) as RectTransform;
                if (rect == null || !rect.gameObject.activeInHierarchy)
                {
                    continue;
                }

                BaseItemRender item = rect.GetComponent <BaseItemRender>();
                if (item != null)
                {
                    items.Add(item);
                    rectChildren.Add(rect);
                }
            }
            m_Tracker.Clear();
        }
Beispiel #2
0
 public void SetSelectItem <T>(string field, object value)
 {
     if (!string.IsNullOrEmpty(field))
     {
         FieldInfo fi = typeof(T).GetField(field);
         if (fi != null)
         {
             for (int i = 0; i < _dataProvider.Length; i++)
             {
                 T itemData = (T)_dataProvider[i];
                 if (fi.GetValue(itemData).Equals(value))
                 {
                     if (_renders.ContainsKey(i))
                     {
                         SetSelectItem(_renders[i]);
                     }
                     else if (_listMax > 0)
                     {
                         if (currentSelect != null)
                         {
                             currentSelect.SetSelect(false);
                             currentSelect = null;
                         }
                         InternalMove(i);
                         SetSelectItem(_renders[i]);
                     }
                     isselect = true;
                     break;
                 }
             }
         }
     }
 }
Beispiel #3
0
    private void MoveBottomToTop(int axis)
    {
        int changenum = 1;

        changenum = Math.Max(changenum, 1);
        if (_listMin < changenum)
        {
            changenum = _listMin;
        }
        for (int i = 0; i < changenum; i++)
        {
            BaseItemRender render = _renders[_listMax - i];
            render.SetItemIndex(_listMin - 1 - i, _dataProvider.Length);
            render.SetData(_dataProvider[_listMin - 1 - i]);
            render.gameObject.name = "item" + (_listMin - 1 - i);
            _renders.Remove(_listMax - i);
            _renders.Add(_listMin - 1 - i, render);
            var rectTran = render.gameObject.GetRectTransform();
//            rectTran.SetAsFirstSibling();
            ResetPosition(rectTran, axis, (_listMax + 1 - _listMin) * (_gridGroup.cellSize[axis] + _gridGroup.spacing[axis]) * (axis == 1 ? 1 : -1));

            var   oldSize = _contTransform.sizeDelta;
            float delta   = changenum * (_gridGroup.cellSize[axis] + _gridGroup.spacing[axis]);
            oldSize[axis]           -= delta;
            _contTransform.sizeDelta = oldSize;

//            float moveDistance = _contTransform.pivot[axis] * delta * (axis == 1 ? 1 : -1);
//            ResetPosition(_contTransform, axis, moveDistance);
        }

        _listMin -= changenum;
        _listMax -= changenum;
    }
Beispiel #4
0
    private bool FindClosestPos(BaseItemRender render)
    {
        bool canMove = false;

        if (_scrollView.vertical || _scrollView.horizontal)
        {
            int   axis   = 0;
            int   flag   = 1;
            float curPos = CalculateCurPos(ref axis, ref flag);
            if (_scrollView.vertical)
            {
                if (flag > 0)
                {
                    curPos -= _gridLayoutGroup.padding.top;
                }
                else
                {
                    curPos += _gridLayoutGroup.padding.bottom;
                }
            }
            else
            {
                if (flag > 0)
                {
                    curPos -= _gridLayoutGroup.padding.right;
                }
                else
                {
                    curPos += _gridLayoutGroup.padding.left;
                }
            }
            curPos -= _gridLayoutGroup.cellSize[axis] * 0.5f * flag;
            int idx;
            if (render != null)
            {
                idx = render.GetItemIndex();
            }
            else
            {
                idx = Mathf.RoundToInt(flag * curPos / (_gridLayoutGroup.cellSize[axis] + _gridLayoutGroup.spacing[axis]));
                if (IsSensitive && _curTarget != null && idx == _curTarget.GetItemIndex())
                {
                    float curTargetPos = _curTarget.GetItemIndex() * (_gridLayoutGroup.cellSize[axis] + _gridLayoutGroup.spacing[axis]);
                    if (flag * curPos - curTargetPos > _gridLayoutGroup.cellSize[axis] * SensitiveParam)
                    {
                        idx++;
                    }
                    else if (curTargetPos - flag * curPos > _gridLayoutGroup.cellSize[axis] * SensitiveParam)
                    {
                        idx--;
                    }
                }

                if (idx < 0)
                {
                    idx = 0;
                }
                else if (idx >= _contentRect.childCount)
                {
                    idx = _contentRect.childCount - 1;
                }
                render = _contentRect.GetChild(idx).GetComponent <BaseItemRender>();
            }
            float delta = flag * (_gridLayoutGroup.cellSize[axis] + _gridLayoutGroup.spacing[axis]) * idx - curPos;
            _targetPos        = _contentRect.anchoredPosition;
            _targetPos[axis] += delta;

            canMove = true;
        }
        if (_curTarget != render)
        {
            if (_curTarget != null && OnCenterBegin != null)
            {
                OnCenterBegin(_curTarget, false);
            }
            _curTarget = render;
            if (OnCenterBegin != null)
            {
                OnCenterBegin(_curTarget, true);
            }
        }
        return(canMove);
    }
Beispiel #5
0
 public void CenterOn(BaseItemRender render)
 {
     _isCentering = FindClosestPos(render);
 }
Beispiel #6
0
 public void Reset()
 {
     _curTarget = null;
 }
Beispiel #7
0
    public void SetSelectItem(BaseItemRender render)
    {
        if (render != null)
        {
            if (currentSelect != null)
            {
                currentSelect.SetSelect(false);
            }
            currentSelect = render;
            currentSelect.SetSelect(true);

            if (_clickHandler != null)
            {
                _clickHandler(render.gameObject);
            }

            render.SetSelect();

            if (_content != null && _scrollRect != null)
            {
                if (_uiCenterOnChild != null)
                {
                    _uiCenterOnChild.CenterOn(render);
                }
                else
                {
                    RectTransform viewRect;
                    if ((UnityEngine.Object)_scrollRect.viewport == (UnityEngine.Object)null)
                    {
                        viewRect = _scrollRect.gameObject.GetRectTransform();
                    }
                    else
                    {
                        viewRect = _scrollRect.viewport;
                    }
                    if (_scrollRect.vertical)
                    {
                        float         anchorGridToScrollview = (_contTransform.anchorMin.y + _contTransform.anchorMax.y) * 0.5f;
                        float         dGridAnchToScrTop      = (1 - anchorGridToScrollview) * viewRect.rect.height;
                        float         dGridPivotToScrTop     = dGridAnchToScrTop - _contTransform.anchoredPosition.y;
                        float         dGridPivotToGridTop    = _contTransform.rect.height * (1 - _contTransform.pivot.y);
                        float         dScrTopToGridTop       = dGridPivotToGridTop - dGridPivotToScrTop;
                        RectTransform itemRectTransform      = render.gameObject.GetRectTransform();
                        float         dItemTopToGridTop      = -itemRectTransform.anchoredPosition.y - (1 - itemRectTransform.pivot.y) * _gridGroup.cellSize.y;
                        if (dItemTopToGridTop < dScrTopToGridTop)   //上边缘被挡住了,需要下拉
                        {
                            float   moveDistance = dItemTopToGridTop - dScrTopToGridTop;
                            Vector2 v            = _contTransform.anchoredPosition;
                            v.y += moveDistance;
                            _contTransform.anchoredPosition = v;
                        }
                        else
                        {
                            float dGridAnchToScrBottom    = anchorGridToScrollview * viewRect.rect.height;
                            float dGridPivotToScrBottom   = dGridAnchToScrBottom + _contTransform.anchoredPosition.y;
                            float dGridPivotToGridBottom  = _contTransform.rect.height * _contTransform.pivot.y;
                            float dScrBottomToGridBottom  = dGridPivotToGridBottom - dGridPivotToScrBottom;
                            float dItemBottomToGridBottom = _contTransform.rect.height + itemRectTransform.anchoredPosition.y - itemRectTransform.pivot.y * _gridGroup.cellSize.y;
                            if (dItemBottomToGridBottom < dScrBottomToGridBottom) //下边缘被挡住了,需要上拉
                            {
                                float   moveDistance = dScrBottomToGridBottom - dItemBottomToGridBottom;
                                Vector2 v            = _contTransform.anchoredPosition;
                                v.y += moveDistance;
                                _contTransform.anchoredPosition = v;
                            }
                        }
                    }
                    else if (_scrollRect.horizontal)
                    {
                        float         anchorGridToScrollview = (_contTransform.anchorMin.x + _contTransform.anchorMax.x) * 0.5f;
                        float         dGridAnchToScrLeft     = anchorGridToScrollview * viewRect.rect.width;
                        float         dGridPivotToScrLeft    = dGridAnchToScrLeft + _contTransform.anchoredPosition.x;
                        float         dGridPivotToGridLeft   = _contTransform.rect.width * _contTransform.pivot.x;
                        float         dScrLeftToGridLeft     = dGridPivotToGridLeft - dGridPivotToScrLeft;
                        RectTransform itemRectTransform      = render.gameObject.GetRectTransform();
                        float         dItemLeftToGridLeft    = itemRectTransform.anchoredPosition.x - itemRectTransform.pivot.x * _gridGroup.cellSize.x;
                        if (dItemLeftToGridLeft < dScrLeftToGridLeft)   //左边缘被挡住了,需要右拉
                        {
                            float   moveDistance = dScrLeftToGridLeft - dItemLeftToGridLeft;
                            Vector2 v            = _contTransform.anchoredPosition;
                            v.x += moveDistance;
                            _contTransform.anchoredPosition = v;
                        }
                        else
                        {
                            float dGridAnchToScrRight   = (1 - anchorGridToScrollview) * viewRect.rect.width;
                            float dGridPivotToScrRight  = dGridAnchToScrRight - _contTransform.anchoredPosition.x;
                            float dGridPivotToGridRight = _contTransform.rect.width * (1 - _contTransform.pivot.x);
                            float dScrRightToGridRight  = dGridPivotToGridRight - dGridPivotToScrRight;
                            float dItemRightToGridRight = _contTransform.rect.width - itemRectTransform.anchoredPosition.x + (1 - itemRectTransform.pivot.x) * _gridGroup.cellSize.x;
                            if (dItemRightToGridRight < dScrRightToGridRight) //右边缘被挡住了,需要左拉
                            {
                                float   moveDistance = dItemRightToGridRight - dScrRightToGridRight;
                                Vector2 v            = _contTransform.anchoredPosition;
                                v.x += moveDistance;
                                _contTransform.anchoredPosition = v;
                            }
                        }
                    }
                }
            }
        }
    }