public void moveToIndex(int dataIndex, bool imediate)
    {
        if (mDataProviders.Count <= dataIndex)
        {
            return;
        }


        DynamicInfinityItem fisrtitem = null;//= itemList[0].itemIndex;

        for (int i = 0; i < itemList.Count; i++)
        {
            if (itemList[i].transform.localPosition.y <= 0)
            {
                fisrtitem = itemList[i];
                break;
            }
        }

        if (fisrtitem != null && fisrtitem.itemIndex >= dataIndex)
        {
            // if(itemList[0].transform.localPosition.y >= 0)
            {
                StartCoroutine(scrollToIndex(dataIndex, -1, imediate));
            }
        }
        else
        {
            StartCoroutine(scrollToIndex(dataIndex, 1, imediate));
        }
    }
Example #2
0
 void OnSelectHandler(DynamicInfinityItem item)
 {
     print("on select " + item.ToString());
     m_SelectedData = (int)item.GetData();
     m_LoopList.GetDataProvider().Remove(m_SelectedData);
     m_LoopList.RefreshDataProvider();
 }
Example #3
0
 /// <summary>
 /// 清理可复用渲染格
 /// 不需要public
 /// </summary>
 void ClearAllListRenderDr()
 {
     if (mList_items != null)
     {
         int len = mList_items.Count;
         for (int i = 0; i < len; ++i)
         {
             DynamicInfinityItem item = mList_items[i];
             item.DRect = null;
         }
     }
 }
Example #4
0
    /// <summary>
    /// 获得待渲染的渲染器
    /// </summary>
    /// <returns></returns>
    DynamicInfinityItem GetNullDynmicItem()
    {
        int len = mList_items.Count;

        for (int i = 0; i < len; ++i)
        {
            DynamicInfinityItem item = mList_items[i];
            if (item.DRect == null)
            {
                return(item);
            }
        }
        throw new Exception("Error");
    }
Example #5
0
    /// <summary>
    /// 通过动态格子获得动态渲染器
    /// </summary>
    /// <param name="rect"></param>
    /// <returns></returns>
    DynamicInfinityItem GetDynmicItem(DynamicRect rect)
    {
        int len = mList_items.Count;

        for (int i = 0; i < len; ++i)
        {
            DynamicInfinityItem item = mList_items[i];
            if (item.DRect == null)
            {
                continue;
            }
            if (rect.Index == item.DRect.Index)
            {
                return(item);
            }
        }
        return(null);
    }
Example #6
0
    protected void UpdateRender()
    {
        //先算mask,保证遮罩
        mRectMask.y = -mMaskSize.y - mRectTransformContainer.anchoredPosition.y;
        Dictionary <int, DynamicRect> inOverlaps = new Dictionary <int, DynamicRect>();

        //这里foreach是否开销很大,改成别的方式
        foreach (DynamicRect dR in mDict_dRect.Values)
        {
            if (dR.Overlaps(mRectMask))//计算是否在mask中
            {
                inOverlaps.Add(dR.Index, dR);
            }
        }
        int len = mList_items.Count;

        for (int i = 0; i < len; ++i)
        {
            DynamicInfinityItem item = mList_items[i];
            if (item.DRect != null && !inOverlaps.ContainsKey(item.DRect.Index))//把那些不需要渲染的隐藏
            {
                item.DRect = null;
            }
        }
        foreach (DynamicRect dR in inOverlaps.Values)
        {
            if (GetDynmicItem(dR) == null)//如果没有获取到就重新生成一个
            {
                Debug.Log("mList_items相当于一个对象池,通过每个子元素中的DRect==null来判断是否使用");

                DynamicInfinityItem item = GetNullDynmicItem();//从对象池里面获取一个
                item.DRect = dR;
                _UpdateChildTransformPos(item.gameObject, dR.Index);

                if (mDataProviders != null && dR.Index < mDataProviders.Count)
                {
                    item.SetData(mDataProviders[dR.Index]);
                }
            }
        }
    }
Example #7
0
    /// <summary>
    /// 初始化渲染脚本
    /// </summary>
    public virtual void InitRendererList(DynamicInfinityItem.OnSelect OnSelect, DynamicInfinityItem.OnUpdateData OnUpdate)
    {
        if (mHasInited)
        {
            return;
        }
        //转换器
        mRectTransformContainer = transform as RectTransform;
        //获得蒙版尺寸
        mMaskSize   = transform.parent.parent.GetComponent <RectTransform>().sizeDelta;
        mScrollRect = transform.parent.parent.GetComponent <ScrollRect>();

        transform.GetComponent <RectTransform>().sizeDelta = Vector2.zero;

        //通过蒙版尺寸和格子尺寸计算需要的渲染器个数
        mRendererCount = ColumnCount * (Mathf.CeilToInt(mMaskSize.y / GetBlockSizeY()) + 1);
        _UpdateDynmicRects(mRendererCount);
        mList_items = new List <DynamicInfinityItem>();
        for (int i = 0; i < mRendererCount; ++i)
        {
            GameObject child = GameObject.Instantiate(RenderGO);
            child.transform.SetParent(transform);
            child.transform.localRotation = Quaternion.identity;
            child.transform.localScale    = Vector3.one;
            child.layer = gameObject.layer;
            DynamicInfinityItem dfItem = child.GetComponent <DynamicInfinityItem>();
            if (dfItem == null)
            {
                throw new Exception("Render must extend DynamicInfinityItem");
            }
            mList_items.Add(dfItem);
            mList_items[i].DRect               = mDict_dRect[i];
            mList_items[i].OnSelectHandler     = OnSelect;
            mList_items[i].OnUpdateDataHandler = OnUpdate;
            child.SetActive(false);
            _UpdateChildTransformPos(child, i);
        }
        _SetListRenderSize(mRendererCount);
        mHasInited = true;
    }
Example #8
0
    protected void UpdateRender()
    {
        mRectMask.y = -mMaskSize.y - mRectTransformContainer.anchoredPosition.y;
        Dictionary <int, DynamicRect> inOverlaps = new Dictionary <int, DynamicRect>();

        foreach (DynamicRect dR in mDict_dRect.Values)
        {
            if (dR.Overlaps(mRectMask))
            {
                inOverlaps.Add(dR.Index, dR);
            }
        }
        int len = mList_items.Count;

        for (int i = 0; i < len; ++i)
        {
            DynamicInfinityItem item = mList_items[i];
            if (item.DRect != null && !inOverlaps.ContainsKey(item.DRect.Index))
            {
                item.DRect = null;
            }
        }
        foreach (DynamicRect dR in inOverlaps.Values)
        {
            if (GetDynmicItem(dR) == null)
            {
                DynamicInfinityItem item = GetNullDynmicItem();
                item.DRect = dR;
                _UpdateChildTransformPos(item.gameObject, dR.Index);

                if (mDataProviders != null && dR.Index < mDataProviders.Count)
                {
                    item.SetData(mDataProviders[dR.Index]);
                }
            }
        }
    }
Example #9
0
 void OnSelectHandler(DynamicInfinityItem item)
 {
     print("on select " + item.ToString());
 }
Example #10
0
 void OnSelectHandler(DynamicInfinityItem item)
 {
     Tips.Instance.OnSuccess(item.ToString());
 }
    private void moveItemPos(float dist)
    {
        for (int i = 0; i < itemList.Count; i++)
        {
            Vector3 lpos = itemList[i].transform.localPosition;

            itemList[i].transform.localPosition = new Vector3(lpos.x, lpos.y + dist, 0);
        }



        for (int i = 0; i < itemList.Count; i++)
        {
            Vector3 lpos       = itemList[i].transform.localPosition;
            float   heightitem = itemList[i].itemHeight;
            if (dist >= 0 && lpos.y > heightitem && itemList[itemList.Count - 1].itemIndex < mDataProviders.Count - 1)
            {
                DynamicInfinityItem rd = itemList[i];
                rd.itemIndex = itemList[itemList.Count - 1].itemIndex + 1;

                int row  = Mathf.FloorToInt(rd.itemIndex / columeCount);
                int row1 = Mathf.FloorToInt((rd.itemIndex - 1) / columeCount);

                if (row > row1)
                {
                    lpos.y = itemList[itemList.Count - 1].transform.localPosition.y - itemList[itemList.Count - 1].itemHeight - spaceSize.y;
                }
                else
                {
                    lpos.y = itemList[itemList.Count - 1].transform.localPosition.y;
                }

                itemList[i].transform.localPosition = lpos;

                rd.SetData(mDataProviders[rd.itemIndex]);
                //Debug.Log("data index:" + rd.itemIndex);
                itemList.RemoveAt(i);
                itemList.Add(rd);
                i--;
            }
            else if (dist < 0 && lpos.y < -viewheight && itemList[0].itemIndex > 0)
            {
                DynamicInfinityItem rd = itemList[i];
                rd.itemIndex = itemList[0].itemIndex - 1;

                int row  = Mathf.FloorToInt(rd.itemIndex / columeCount);
                int row1 = Mathf.FloorToInt((rd.itemIndex + 1) / columeCount);

                if (row < row1)
                {
                    lpos.y = itemList[0].transform.localPosition.y + itemList[i].itemHeight + spaceSize.y;
                }
                else
                {
                    lpos.y = itemList[0].transform.localPosition.y;
                }

                int column = rd.itemIndex % columeCount;
                lpos.x = (minCellSize.x + spaceSize.x) * column;

                itemList[i].transform.localPosition = lpos;

                rd.SetData(mDataProviders[rd.itemIndex]);
                itemList.RemoveAt(i);
                itemList.Insert(0, rd);
            }
        }
        //updateItemPos();
    }
Example #12
0
 void OnUpdateHandler(DynamicInfinityItem item)
 {
     print("on upadte " + item.ToString());
 }