public override void Draw(Android.Graphics.Canvas canvas) { base.Draw(canvas); var rect = new RectF(0,0,300,300); switch (TheShape) { case Shape.Circle: canvas.DrawOval(rect, new Paint() { Color = Color.Aqua }); break; case Shape.Square: canvas.DrawRect(rect, new Paint() { Color = Color.Red }); break; case Shape.Triangle: var path = new Path(); path.MoveTo(rect.CenterX(), 0); path.LineTo(0, rect.Height()); path.LineTo(rect.Width(), rect.Height()); path.Close(); var paint = new Paint() {Color = Color.Magenta}; paint.SetStyle(Paint.Style.Fill); canvas.DrawPath(path, paint); break; default: throw new ArgumentOutOfRangeException(); } }
protected override void OnDraw(Android.Graphics.Canvas canvas) { var rect = new RectF(0, 0, 300, 300); switch (Shape) { case Shape.Circle: canvas.DrawOval(rect, new Paint() { Color = Color.CornflowerBlue }); break; case Shape.Square: canvas.DrawRect(rect, new Paint() { Color = Color.Crimson }); break; case Shape.Triangle: var path = new Path(); path.MoveTo(rect.CenterX(), rect.Top); path.LineTo(rect.Left, rect.Bottom); path.LineTo(rect.Right, rect.Bottom); path.Close(); var paint = new Paint() {Color = Color.Crimson}; paint.Color = Color.Gold; paint.SetStyle(Paint.Style.Fill); canvas.DrawPath(path, paint); break; default: throw new ArgumentOutOfRangeException(); } }
/// <Docs>The Canvas to which the View is rendered.</Docs> /// <summary> /// BoxViewのカスタマイズはDrawで行う /// </summary> /// <param name="canvas">Canvas.</param> public override void Draw(Android.Graphics.Canvas canvas) { // 2重に描画してしまうので、baseは描画しない //base.Draw(canvas); // ElementをキャストしてFormsで定義したCustomBoxViewを取得 var formsBox = (CustomBoxView)Element; // Androidの描画はPaintを使用 using (var paint = new Paint()) { // 塗りつぶし色の設定 paint.Color = formsBox.FillColor.ToAndroid(); // 吹き出し部分の設定 // パスの生成 var path = new Path(); // スタート地点の設定 path.MoveTo(0, 0); // 経由地点の設定 path.LineTo(100, 10); path.LineTo(100, 100); // パスを繋げる path.Close(); // 描画 canvas.DrawPath(path, paint); // 角の丸い四角の設定 // 角丸の直径を決める // widthとheightを比較して小さい方を基準にする var minSize = Math.Min(Width, Height); // 指定するのは直径なので、指定半径を2倍する var diameter = formsBox.Radius * 2; // 角丸の直径はminSize以下でなければならない if (diameter > minSize) diameter = minSize; // 描画領域の設定 var rect = new RectF(0, 0, (float)Width, (float)Height); //四角形描画 canvas.DrawRoundRect(rect, diameter, diameter, paint); } }
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); }
protected override void OnDraw(Shape shape, Android.Graphics.Canvas canvas, Paint paint) { var height = canvas.ClipBounds.Bottom; var width = canvas.ClipBounds.Right; if (noChild) { var borderHeight = (int)(this.borderThickness.Top + this.borderThickness.Bottom); var borderWidth = (int)(this.borderThickness.Left + this.borderThickness.Right); height = borderHeight > 0 ? borderHeight : canvas.ClipBounds.Bottom; width = borderWidth > 0 ? borderWidth : canvas.ClipBounds.Right; } shape.Resize(width, height); shape.Draw(canvas, strokepaint); var pathInner = new Path(); var rect = new RectF( (float)(borderThickness.Left), (float)(borderThickness.Top), (float)(canvas.ClipBounds.Right - borderThickness.Right), (float)(canvas.ClipBounds.Bottom - borderThickness.Bottom)); pathInner.AddRoundRect(rect, cornerRadiusArray, Path.Direction.Cw); if (!noChild) { var clearPaint = new Paint(); clearPaint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Clear)); canvas.DrawPath(pathInner, clearPaint); } canvas.DrawPath(pathInner, fillpaint); }
protected override void OnDraw (Android.Graphics.Canvas canvas) { canvas.DrawBitmap (canvasBitmap, 0, 0, canvasPaint); canvas.DrawPath (drawPath, drawPaint); }