Example #1
0
    ListCellView ActiveCell(int index)
    {
        ListCellView cellView;

        if (m_UnuseCells.Count <= 0)
        {
            ListCellView cellView_ = DynamicCell().GetComponent <ListCellView>();
            cellView_.InitView();
            m_UnuseCells.Add(cellView_);
        }
        cellView       = m_UnuseCells[0];
        cellView.index = index;
        m_UnuseCells.Remove(cellView);
        //if (m_VisiableCells.IndexOf(cellView) == -1)
        {
            m_VisiableCells.Add(cellView);
        }
        Vector3 pos = Vector3.zero;

        switch (m_Orientation)
        {
        case ListViewOrientation.Horizontal:
            pos = new Vector3(1, 0, 0);
            break;

        case ListViewOrientation.Vertical:
            pos = new Vector3(0, -1, 0);
            break;
        }
        float d = m_CellOffset + index * (m_CellSize + m_CellSpacing);

        cellView.transform.localPosition = pos * d;
        cellView.gameObject.SetActive(true);
        return(cellView);
    }
Example #2
0
    private void Awake()
    {
        m_ListRect = GetComponent <RectTransform>();

        Transform cells = transform.Find("Cells");

        m_Cells         = cells;
        m_ListCellsRect = cells.GetComponent <RectTransform>();

        ListCellView[] cellViews = cells.GetComponentsInChildren <ListCellView>();
        m_DynamicCell     = cellViews[0].gameObject;
        m_DynamicCellRect = m_DynamicCell.GetComponent <RectTransform>();
        int needCellNum = ComputeVisiableNum();

        for (int i = 0; i < cellViews.Length; i++)
        {
            cellViews[i].gameObject.SetActive(false);
            cellViews[i].Init(this);
            cellViews[i].InitView();
            m_UnuseCells.Add(cellViews[i]);
        }
        for (int i = 0; i < needCellNum - cellViews.Length; i++)
        {
            ListCellView cellView = DynamicCell().GetComponent <ListCellView>();
            cellView.Init(this);
            cellView.InitView();
            m_UnuseCells.Add(cellView);
        }
        Assembly assembly = Assembly.GetExecutingAssembly();

        m_object     = assembly.CreateInstance(viewName);
        m_objectType = Type.GetType(viewName);
        InitView();
    }
Example #3
0
 void DeactiveCell(ListCellView cellView)
 {
     cellView.index = -1;
     m_VisiableCells.Remove(cellView);
     cellView.CloseView();
     cellView.gameObject.SetActive(false);
     //if (m_UnuseCells.IndexOf(cellView) == -1)
     {
         m_UnuseCells.Add(cellView);
     }
 }
Example #4
0
    void UpdateList(bool forceUpdateCells = false)
    {
        UpdateCellsRect();
        int pos = ComputeCurrentPosition();

        pos--;
        if (pos < 0)
        {
            pos = 0;
        }
        int   num     = ComputeVisiableNum();
        float offset  = m_StartPadding + pos * (m_CellSize + m_CellSpacing);
        float cellPos = 0;

        if (pos != m_LastPosition || num != m_LastVisiableNum || forceUpdateCells)
        {
            ListCellView[]      cells = new ListCellView[num];
            List <ListCellView> unuse = new List <ListCellView>();
            for (int i = 0; i < m_VisiableCells.Count; i++)
            {
                ListCellView cellView = m_VisiableCells[i];
                int          p        = cellView.index - pos;
                if (cellView.index > -1 && cellView.index < m_DataSize && p > -1 && p < cells.Length)
                {
                    cells[p] = cellView;
                }
                else
                {
                    unuse.Add(cellView);
                }
            }
            for (int i = 0; i < unuse.Count; i++)
            {
                DeactiveCell(unuse[i]);
            }
            for (int i = 0; i < cells.Length; i++)
            {
                if (pos + i >= 0 && pos + i < m_DataSize && cells[i] == null)
                {
                    cells[i] = ActiveCell(pos + i);
                    cells[i].DrawCell(handle, cells[i].index);
                }
                else if (cells[i] != null)
                {
                    if (forceUpdateCells)
                    {
                        cells[i].DrawCell(handle, cells[i].index);
                    }
                }
            }
        }
        m_LastPosition    = pos;
        m_LastVisiableNum = num;
    }