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; } }
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(); }
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(); }
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(); }