public override void Draw(Android.Graphics.Canvas canvas) { try { int width = this.Width - this.PaddingLeft - this.PaddingRight; int height = this.Height - this.PaddingBottom - this.PaddingTop; var radius = Math.Min(width, height) / 2; //var strokeWidth = ((float)(5 * Math.Min(width, height))) / 100; //radius -= (int)Math.Round(strokeWidth / 2); // A revoir: Est-ce que c'est bien centré avec les padding? Path path = new Path(); path.AddCircle(this.PaddingLeft + (width / 2), this.PaddingTop + (height / 2), radius, Path.Direction.Ccw); canvas.Save(); canvas.ClipPath(path); base.Draw(canvas); canvas.Restore(); //path = new Path(); //path.AddCircle(this.PaddingLeft + (width / 2), this.PaddingTop + (height / 2), radius, Path.Direction.Ccw); //var paint = new Paint(); //paint.AntiAlias = true; //paint.StrokeWidth = strokeWidth; //paint.SetStyle(Paint.Style.Stroke); //paint.Color = Color.Black; //canvas.DrawPath(path, paint); //paint.Dispose(); path.Dispose(); return; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Unable to create circle image: " + ex); } base.Draw(canvas); }
protected override bool DrawChild(Android.Graphics.Canvas canvas, Android.Views.View child, long drawingTime) { try { var element = (RoundedImage)Element; var radius = Math.Min(Width, Height) / 2; var strokeWidth = 10; radius -= strokeWidth / 2; //Create path to clip var path = new Path(); path.AddCircle(Width / 2, Height / 2, radius, Path.Direction.Ccw); canvas.Save(); canvas.ClipPath(path); var result = base.DrawChild(canvas, child, drawingTime); canvas.Restore(); // Create path for circle border path = new Path(); path.AddCircle(Width / 2, Height / 2, radius, Path.Direction.Ccw); var paint = new Paint(); paint.AntiAlias = true; //TODO look for a correct way to assign the BorderWidth depending of the screen dpi paint.StrokeWidth = (float)element.BorderWidth; paint.SetStyle(Paint.Style.Stroke); paint.Color = element.BorderColor.ToAndroid(); canvas.DrawPath(path, paint); //Properly dispose paint.Dispose(); path.Dispose(); return result; } catch (Exception ex) { //Why this happend Console.WriteLine(ex.Message); } return base.DrawChild(canvas, child, drawingTime); }