Beispiel #1
0
        protected internal override void OnTouchEvent(TouchEventCollection touchEvents)
        {
            base.OnTouchEvent(touchEvents);
            TouchEvent primaryTouchEvent = touchEvents.PrimaryTouchEvent;
            bool       flag = false;

            switch (primaryTouchEvent.Type)
            {
            case TouchEventType.Up:
                if (this.animationState == LiveListPanel.AnimationState.Drag)
                {
                    this.animationState = LiveListPanel.AnimationState.None;
                    this.isScrolling    = false;
                    flag = true;
                }
                this.UpdateScrollBarVisible();
                break;

            case TouchEventType.Down:
            {
                if (this.animationState == LiveListPanel.AnimationState.Flick)
                {
                    this.animationState = LiveListPanel.AnimationState.None;
                }
                float y = primaryTouchEvent.LocalPosition.Y;
                using (List <LiveListPanel.ListItemData> .Enumerator enumerator = this.usingItemDataList.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        LiveListPanel.ListItemData current = enumerator.Current;
                        ListPanelItem item = this.GetItem(current.item.Index + 1);
                        if (item != null && current.item.Y <= y && y < item.Y)
                        {
                            this.scrollBaseIndex = current.item.Index;
                        }
                        current.scrollStartRotationZ = current.slideEndRotationZ;
                    }
                }
                this.UpdateScrollEndRotationZ();
                break;
            }
            }
            if (this.animationState == LiveListPanel.AnimationState.None && !this.isScrolling && !flag)
            {
                touchEvents.Forward = true;
            }
        }
Beispiel #2
0
 private void FlickEventHandler(object sender, FlickEventArgs e)
 {
     if (e.Speed.Y == 0f)
     {
         return;
     }
     this.animationState = LiveListPanel.AnimationState.Flick;
     if (e.Speed.Y > 0f)
     {
         this.scrollDirection = FourWayDirection.Down;
     }
     else
     {
         this.scrollDirection = FourWayDirection.Up;
     }
     this.flickDistance      = e.Speed.Y * 0.015f;
     this.flickStartDistance = this.flickDistance;
     this.flickElapsedTime   = 0f;
     this.ScrollOffset(this.flickDistance);
     this.UpdateListItemData();
 }
Beispiel #3
0
 private void DragEventHandler(object sender, DragEventArgs e)
 {
     if (e.Distance.Y == 0f)
     {
         return;
     }
     this.animationState = LiveListPanel.AnimationState.Drag;
     this.isScrolling    = true;
     if (e.Distance.Y > 0f)
     {
         this.scrollDirection = FourWayDirection.Down;
     }
     else
     {
         this.scrollDirection = FourWayDirection.Up;
     }
     if (this.prevScrollDirection != this.scrollDirection)
     {
         this.UpdateScrollEndRotationZ();
     }
     this.prevScrollDirection = this.scrollDirection;
     this.ScrollOffset(e.Distance.Y);
     this.UpdateListItemData();
 }
Beispiel #4
0
        protected override void OnUpdate(float elapsedTime)
        {
            base.OnUpdate(elapsedTime);
            elapsedTime = this.GetElapsedTimeMovingAverage(elapsedTime);
            if (this.needRefresh)
            {
                this.refresh();
                this.needRefresh = false;
            }
            bool flag = false;

            if (this.scrollPosition < 0f || this.scrollPosition > this.MaxScrollPosition)
            {
                flag = true;
                this.terminalResetElapsedTime = 0f;
            }
            else
            {
                this.terminalResetElapsedTime += elapsedTime;
            }
            using (List <LiveListPanel.ListItemData> .Enumerator enumerator = this.usingItemDataList.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    LiveListPanel.ListItemData current = enumerator.Current;
                    if (current.IsSliding)
                    {
                        flag = true;
                        current.SlideElapsedTime += elapsedTime;
                        if (current.SlideElapsedTime > this.itemSlideInTime)
                        {
                            current.IsSliding = false;
                        }
                    }
                }
            }
            using (List <LiveListPanel.ListItemData> .Enumerator enumerator2 = this.usingItemDataList.GetEnumerator())
            {
                while (enumerator2.MoveNext())
                {
                    LiveListPanel.ListItemData current2 = enumerator2.Current;
                    if (current2.IsScrolling)
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (this.animationState == LiveListPanel.AnimationState.Flick)
            {
                this.flickElapsedTime += elapsedTime;
                flag = true;
                this.flickDistance = this.flickStartDistance * (1f - this.flickElapsedTime / this.animationTime) * (1f - this.flickElapsedTime / this.animationTime);
                bool flag2 = false;
                using (List <LiveListPanel.ListItemData> .Enumerator enumerator3 = this.usingItemDataList.GetEnumerator())
                {
                    while (enumerator3.MoveNext())
                    {
                        LiveListPanel.ListItemData current3 = enumerator3.Current;
                        if (current3.IsScrolling)
                        {
                            flag2 = true;
                        }
                    }
                }
                if (!flag2)
                {
                    this.animationState = LiveListPanel.AnimationState.None;
                }
                else if (this.flickElapsedTime > this.animationTime)
                {
                    this.ScrollOffset(0f);
                }
                else
                {
                    this.ScrollOffset(this.flickDistance);
                }
            }
            if (this.animationState != LiveListPanel.AnimationState.Drag)
            {
                if (this.scrollPosition < 0f)
                {
                    this.scrollPosition += elapsedTime * this.terminalDecay;
                    if (this.scrollPosition > 0f)
                    {
                        this.scrollPosition = 0f;
                    }
                }
                else if (this.scrollPosition > this.MaxScrollPosition)
                {
                    this.scrollPosition -= elapsedTime * this.terminalDecay;
                    if (this.scrollPosition < this.MaxScrollPosition)
                    {
                        this.scrollPosition = this.MaxScrollPosition;
                    }
                }
            }
            if (flag)
            {
                this.UpdateListItemData(elapsedTime);
                return;
            }
            this.isScrolling = false;
            this.UpdateScrollBarVisible();
        }