using Android.Content; using Android.Graphics; using Pixiview.Droid.Renderers; using Pixiview.UI; using Xamarin.Forms; [assembly: ExportRenderer(typeof(RoundImage), typeof(RoundImageRenderer))] namespace Pixiview.Droid.Renderers { public class RoundImageRenderer : Xamarin.Forms.Platform.Android.FastRenderers.ImageRenderer { public RoundImageRenderer(Context context) : base(context) { } public override void SetBackgroundColor(Android.Graphics.Color color) { // nothing } protected override void OnDraw(Canvas canvas) { if (Element is RoundImage image) { var radius = image.CornerRadius; var mask = image.CornerMasks; if (radius > 0 && mask != CornerMask.None) { var r = Resources.DisplayMetrics.Density * radius; var radii = new float[8]; if ((mask & CornerMask.LeftTop) == CornerMask.LeftTop) { radii[0] = radii[1] = r; } if ((mask & CornerMask.RightTop) == CornerMask.RightTop) { radii[2] = radii[3] = r; } if ((mask & CornerMask.RightBottom) == CornerMask.RightBottom) { radii[4] = radii[5] = r; } if ((mask & CornerMask.LeftBottom) == CornerMask.LeftBottom) { radii[6] = radii[7] = r; } var path = new Path(); int width = Width; int height = Height; path.AddRoundRect(new RectF(0, 0, width, height), radii, Path.Direction.Cw); canvas.ClipPath(path); } } base.OnDraw(canvas); } } }