diff --git a/src/Controls/src/Core/Handlers/Items/Android/ItemContentView.cs b/src/Controls/src/Core/Handlers/Items/Android/ItemContentView.cs index 5067a8e1b025..b194b3d79df4 100644 --- a/src/Controls/src/Core/Handlers/Items/Android/ItemContentView.cs +++ b/src/Controls/src/Core/Handlers/Items/Android/ItemContentView.cs @@ -65,7 +65,7 @@ protected override void OnLayout(bool changed, int l, int t, int r, int b) return; } - var size = Context.FromPixels(r - l, b - t); + var size = this.FromPixels(r - l, b - t); //TODO: RUI Is this the best way? //View.Arrange(new Rectangle(Point.Zero, size)); @@ -99,23 +99,23 @@ protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) var width = MeasureSpec.GetMode(widthMeasureSpec) == MeasureSpecMode.Unspecified ? double.PositiveInfinity - : Context.FromPixels(pixelWidth); + : this.FromPixels(pixelWidth); var height = MeasureSpec.GetMode(heightMeasureSpec) == MeasureSpecMode.Unspecified ? double.PositiveInfinity - : Context.FromPixels(pixelHeight); + : this.FromPixels(pixelHeight); var measure = View.Measure(width, height); if (pixelWidth == 0) { - pixelWidth = (int)Context.ToPixels(measure.Width); + pixelWidth = (int)this.ToPixels(measure.Width); } if (pixelHeight == 0) { - pixelHeight = (int)Context.ToPixels(measure.Height); + pixelHeight = (int)this.ToPixels(measure.Height); } _reportMeasure?.Invoke(new Size(pixelWidth, pixelHeight)); @@ -144,10 +144,10 @@ void UpdateContentLayout() if (mauiControlsView == null || aview == null) return; - var x = (int)Context.ToPixels(mauiControlsView.X); - var y = (int)Context.ToPixels(mauiControlsView.Y); - var width = Math.Max(0, (int)Context.ToPixels(mauiControlsView.Width)); - var height = Math.Max(0, (int)Context.ToPixels(mauiControlsView.Height)); + var x = (int)this.ToPixels(mauiControlsView.X); + var y = (int)this.ToPixels(mauiControlsView.Y); + var width = Math.Max(0, (int)this.ToPixels(mauiControlsView.Width)); + var height = Math.Max(0, (int)this.ToPixels(mauiControlsView.Height)); aview.Layout(x, y, width, height); diff --git a/src/Controls/src/Core/Handlers/Items/Android/RecyclerViewScrollListener.cs b/src/Controls/src/Core/Handlers/Items/Android/RecyclerViewScrollListener.cs index bc3be780ee54..4bdeb5c08231 100644 --- a/src/Controls/src/Core/Handlers/Items/Android/RecyclerViewScrollListener.cs +++ b/src/Controls/src/Core/Handlers/Items/Android/RecyclerViewScrollListener.cs @@ -41,14 +41,12 @@ public override void OnScrolled(RecyclerView recyclerView, int dx, int dy) _verticalOffset += dy; var (First, Center, Last) = GetVisibleItemsIndex(recyclerView); - - var context = recyclerView.Context; var itemsViewScrolledEventArgs = new ItemsViewScrolledEventArgs { - HorizontalDelta = context.FromPixels(dx), - VerticalDelta = context.FromPixels(dy), - HorizontalOffset = context.FromPixels(_horizontalOffset), - VerticalOffset = context.FromPixels(_verticalOffset), + HorizontalDelta = recyclerView.FromPixels(dx), + VerticalDelta = recyclerView.FromPixels(dy), + HorizontalOffset = recyclerView.FromPixels(_horizontalOffset), + VerticalOffset = recyclerView.FromPixels(_verticalOffset), FirstVisibleItemIndex = First, CenterItemIndex = Center, LastVisibleItemIndex = Last diff --git a/src/Core/src/Platform/Android/ContextExtensions.cs b/src/Core/src/Platform/Android/ContextExtensions.cs index 38b0418b4a17..5b084a10ed2c 100644 --- a/src/Core/src/Platform/Android/ContextExtensions.cs +++ b/src/Core/src/Platform/Android/ContextExtensions.cs @@ -32,6 +32,13 @@ public static class ContextExtensions // TODO FromPixels/ToPixels is both not terribly descriptive and also possibly sort of inaccurate? // These need better names. It's really To/From Device-Independent, but that doesn't exactly roll off the tongue. + internal static double FromPixels(this View view, double pixels) + { + if (s_displayDensity != float.MinValue) + return pixels / s_displayDensity; + return view.Context.FromPixels(pixels); + } + public static double FromPixels(this Context? self, double pixels) { EnsureMetrics(self); @@ -39,6 +46,11 @@ public static double FromPixels(this Context? self, double pixels) return pixels / s_displayDensity; } + internal static Size FromPixels(this View view, double width, double height) + { + return new Size(view.FromPixels(width), view.FromPixels(height)); + } + public static Size FromPixels(this Context context, double width, double height) { return new Size(context.FromPixels(width), context.FromPixels(height));