chenxin
2020-11-21 1ac26c01ffdc426d1e5db2950260e97c540ad1ed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using EnhancedUI.EnhancedScroller;
 
namespace EnhancedScrollerDemos.JumpToDemo
{
    /// <summary>
    /// This demo shows how to jump to an index in the scroller. You can jump to a position before
    /// or after the cell. You can also include the spacing before or after the cell.
    /// </summary>
    public class Controller : MonoBehaviour, IEnhancedScrollerDelegate
    {
        /// <summary>
        /// In this example we are going to use a standard generic List. We could have used
        /// a SmallList for efficiency, but this is just a demonstration that other list
        /// types can be used.
        /// </summary>
        private List<Data> _data;
 
        /// <summary>
        /// Reference to the scrollers
        /// </summary>
        public EnhancedScroller vScroller;
        public EnhancedScroller hScroller;
 
        /// <summary>
        /// References to the UI elements
        /// </summary>
        public InputField jumpIndexInput;
        public Toggle useSpacingToggle;
        public Slider scrollerOffsetSlider;
        public Slider cellOffsetSlider;
 
        /// <summary>
        /// Reference to the cell prefab
        /// </summary>
        public EnhancedScrollerCellView cellViewPrefab;
 
        public EnhancedScroller.TweenType vScrollerTweenType = EnhancedScroller.TweenType.immediate;
        public float vScrollerTweenTime = 0f;
 
        public EnhancedScroller.TweenType hScrollerTweenType = EnhancedScroller.TweenType.immediate;
        public float hScrollerTweenTime = 0f;
 
        void Start()
        {
            // set up the scroller delegates
            vScroller.Delegate = this;
            hScroller.Delegate = this;
 
            // set up some simple data
            _data = new List<Data>();
            for (var i = 0; i < 1000; i++)
                _data.Add(new Data() { cellText = "Cell Data Index " + i.ToString() });
 
            // tell the scroller to reload now that we have the data
            vScroller.ReloadData();
            hScroller.ReloadData();
        }
 
        #region UI Handlers
 
        public void JumpButton_OnClick()
        {
            int jumpDataIndex;
 
            // extract the integer from the input text
            if (int.TryParse(jumpIndexInput.text, out jumpDataIndex))
            {
                // jump to the index
                vScroller.JumpToDataIndex(jumpDataIndex, scrollerOffsetSlider.value, cellOffsetSlider.value, useSpacingToggle.isOn, vScrollerTweenType, vScrollerTweenTime);
                hScroller.JumpToDataIndex(jumpDataIndex, scrollerOffsetSlider.value, cellOffsetSlider.value, useSpacingToggle.isOn, hScrollerTweenType, hScrollerTweenTime);
            }
            else
            {
                Debug.LogWarning("The jump value you entered is not a number.");
            }
        }
 
        #endregion
 
        #region EnhancedScroller Handlers
 
        /// <summary>
        /// This tells the scroller the number of cells that should have room allocated. This should be the length of your data array.
        /// </summary>
        /// <param name="scroller">The scroller that is requesting the data size</param>
        /// <returns>The number of cells</returns>
        public int GetNumberOfCells(EnhancedScroller scroller)
        {
            // in this example, we just pass the number of our data elements
            return _data.Count;
        }
 
        /// <summary>
        /// This tells the scroller what the size of a given cell will be. Cells can be any size and do not have
        /// to be uniform. For vertical scrollers the cell size will be the height. For horizontal scrollers the
        /// cell size will be the width.
        /// </summary>
        /// <param name="scroller">The scroller requesting the cell size</param>
        /// <param name="dataIndex">The index of the data that the scroller is requesting</param>
        /// <returns>The size of the cell</returns>
        public float GetCellViewSize(EnhancedScroller scroller, int dataIndex)
        {
            // in this example, even numbered cells are 30 pixels tall, odd numbered cells are 100 pixels tall for the vertical scroller
            // the horizontal scroller has a fixed cell size of 200 pixels
 
            if (scroller == vScroller)
                return (dataIndex % 2 == 0 ? 30f : 100f);
            else
                return (200f);
        }
 
        /// <summary>
        /// Gets the cell to be displayed. You can have numerous cell types, allowing variety in your list.
        /// Some examples of this would be headers, footers, and other grouping cells.
        /// </summary>
        /// <param name="scroller">The scroller requesting the cell</param>
        /// <param name="dataIndex">The index of the data that the scroller is requesting</param>
        /// <param name="cellIndex">The index of the list. This will likely be different from the dataIndex if the scroller is looping</param>
        /// <returns>The cell for the scroller to use</returns>
        public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex)
        {
            // first, we get a cell from the scroller by passing a prefab.
            // if the scroller finds one it can recycle it will do so, otherwise
            // it will create a new cell.
            CellView cellView = scroller.GetCellView(cellViewPrefab) as CellView;
 
            // set the name of the game object to the cell's data index.
            // this is optional, but it helps up debug the objects in 
            // the scene hierarchy.
            cellView.name = "Cell " + dataIndex.ToString();
 
            // in this example, we just pass the data to our cell's view which will update its UI
            cellView.SetData(_data[dataIndex]);
 
            // return the cell to the scroller
            return cellView;
        }
 
        #endregion
    }
}