Example #1
0
        private void UpdateViewRange(int scrollStep)
        {
            LoopInfo target = new LoopInfo
            {
                Left   = scrollStep,
                Length = PageStepLen
            };
            int viewCount = Mathf.Min(ItemCount - target.Left * PageDiv, PageSize);

            if (viewCount < 0)
            {
                viewCount = 0;
            }
            int deltaSize = viewCount - viewList.Count;

            for (int i = 0; i < deltaSize; i++)
            {
                viewList.Add(null);
            }
            LoopInfo intersection = target.Clamp(viewRange);
            int      sstart       = 0;
            int      scount       = 0;

            if (intersection.Length > 0)
            {
                sstart = Mathf.Max(0, target.GetOffset(intersection.Left) * PageDiv);
                scount = Mathf.Min(intersection.Length * PageDiv, viewCount);
                var sdir = target.GetOffset(viewRange.Left) * PageDiv;
                MoveItems(viewList, sstart - sdir, scount, sdir);
            }
            for (int i = 0; i < -deltaSize; i++)
            {
                DisposeItem(viewList, viewList.Count - 1);
            }
            int a = sstart;
            int b = a + scount - 1;

            for (int i = 0; i < viewCount; i++)
            {
                if (i < a || i > b)
                {
                    UpdateItem(viewList, i, OffsetByPage(target, i));
                }
            }
            viewRange.Left   = scrollStep;
            viewRange.Length = PageStepLen;
        }