I have a RecyclerView which sometimes has an item that is larger (vertically) than the RecyclerView. I override the CalculateDtToFit method of a LinearSmoothScroller to adjust this by changing the parameters. Here is my LinearSmoothScroller:
public class RoundSmoothScroller : LinearSmoothScroller
{
public RoundSmoothScroller(Context context) : base(context) { }
public override int CalculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference)
{
if (MainActivity.useroundsmoothscroll)
{
MainActivity.useroundsmoothscroll = false;
if (this.TargetPosition == 0) { return base.CalculateDtToFit(viewStart, viewEnd, boxStart, boxEnd, LinearSmoothScroller.SnapToStart); }
else if (this.TargetPosition == 1) { return base.CalculateDtToFit((int)(viewStart - 27 * Application.Context.Resources.DisplayMetrics.Density), viewEnd, boxStart, boxEnd, LinearSmoothScroller.SnapToStart); }
else if (this.TargetPosition == MainActivity.Players[MainActivity.CurrentPlayerIndex].Scores.Count) { return base.CalculateDtToFit((int)(viewStart - (((MainActivity)Xamarin.Essentials.Platform.CurrentActivity).Cumulative ? 27 : 54) * Application.Context.Resources.DisplayMetrics.Density), (int)(viewStart + 54 * Application.Context.Resources.DisplayMetrics.Density), boxStart, boxEnd, LinearSmoothScroller.SnapToAny); }
else { return base.CalculateDtToFit((int)(viewStart - (((MainActivity)Xamarin.Essentials.Platform.CurrentActivity).Cumulative ? 27 : 54) * Application.Context.Resources.DisplayMetrics.Density), (int)(viewStart + (((MainActivity)Xamarin.Essentials.Platform.CurrentActivity).Cumulative ? 81 : 108) * Application.Context.Resources.DisplayMetrics.Density), boxStart, boxEnd, LinearSmoothScroller.SnapToAny); }
}
else { return 0; }
}
}
However, it is still scrolling to the end of the original area rather than the values I pass when calling base.CalculateDtToFit. Why is it not scrolling to the area I specify?