void OnEndDrag() { float vec = mLoopListView.ScrollRect.velocity.x; int curNearestItemIndex = mLoopListView.CurSnapNearestItemIndex; LoopListViewItem2 item = mLoopListView.GetShownItemByItemIndex(curNearestItemIndex); if (item == null) { mLoopListView.ClearSnapData(); return; } if (Mathf.Abs(vec) < 50f) { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex); return; } Vector3 pos = mLoopListView.GetItemCornerPosInViewPort(item, ItemCornerEnum.LeftTop); if (pos.x > 0) { if (vec > 0) { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex - 1); } else { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex); } } else if (pos.x < 0) { if (vec > 0) { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex); } else { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex + 1); } } else { if (vec > 0) { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex - 1); } else { mLoopListView.SetSnapTargetItemIndex(curNearestItemIndex + 1); } } }