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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }