public override int FindTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) { if (CurrentTargetPosition == -1) { CurrentTargetPosition = base.FindTargetSnapPosition(layoutManager, velocityX, velocityY); return(CurrentTargetPosition); } var increment = 1; if (layoutManager.CanScrollHorizontally()) { if (velocityX < 0) { increment = -1; } } else if (layoutManager.CanScrollVertically()) { if (velocityY < 0) { increment = -1; } } if (IsLayoutReversed(layoutManager)) { increment = increment * -1; } CurrentTargetPosition = CurrentTargetPosition + increment; return(CurrentTargetPosition); }
public override int[] CalculateDistanceToFinalSnap(RecyclerView.LayoutManager layoutManager, View targetView) { int[] result = new int[2]; result[0] = layoutManager.CanScrollHorizontally() ? DistanceToStart(targetView, GetHorizontalHelper(layoutManager)) : 0; result[1] = layoutManager.CanScrollVertically() ? DistanceToStart(targetView, GetVerticalHelper(layoutManager)) : 0; return(result); }
public override int FindTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) { var itemCount = layoutManager.ItemCount; //reset CurrentTargetPosition if ItemCount Changed is requested //We could be adding a item before the CurrentTargetPosition if (_previousCount != itemCount) { CurrentTargetPosition = -1; _previousCount = itemCount; } if (CurrentTargetPosition == -1) { CurrentTargetPosition = base.FindTargetSnapPosition(layoutManager, velocityX, velocityY); return(CurrentTargetPosition); } var increment = 1; if (layoutManager.CanScrollHorizontally()) { if (velocityX < 0) { increment = -1; } } else if (layoutManager.CanScrollVertically()) { if (velocityY < 0) { increment = -1; } } if (IsLayoutReversed(layoutManager)) { increment *= -1; } if (CurrentTargetPosition == itemCount - 1 && increment == 1) { return(CurrentTargetPosition); } CurrentTargetPosition = CurrentTargetPosition + increment; return(CurrentTargetPosition); }