public override void Draw(Android.Graphics.Canvas canvas) { base.Draw (canvas); Paint mBgPaints = new Paint (); mBgPaints.AntiAlias = true; mBgPaints.SetStyle (Paint.Style.Fill); mBgPaints.Color = Color.Blue; mBgPaints.StrokeWidth = 0.5f; Paint tPaint = new Paint (); tPaint.Alpha = 0; canvas.DrawColor (tPaint.Color); RectF mOvals = new RectF (40, 40, layout.MeasuredWidth - 40, layout.MeasuredHeight - 40); decimal total = 0; foreach (SecuritiesViewModel.PieChartValue value in securitiesViewModel.DataForPieChart ()) { total += value.amount; } if (total == 0) { return; } decimal degressPerAmount = 360 / total; decimal currentAngle = 0; foreach (SecuritiesViewModel.PieChartValue value in securitiesViewModel.DataForPieChart ()) { canvas.DrawArc (mOvals, (float)currentAngle, (float)(degressPerAmount * value.amount), true, mBgPaints); currentAngle += (degressPerAmount * value.amount); mBgPaints.SetARGB (255, new Random ().Next (256), new Random ().Next (256), new Random ().Next (256)); } }
protected override void OnDraw(Android.Graphics.Canvas canvas) { var radius = (Height / 2) - 4; var middleX = Width / 2; var middleY = Height / 2; var minutes = (int)time.TotalMinutes; var rotation = minutes / 60; var color = baseQuadrantColor; for (int i = 0; i <= rotation; i++) { var angle = minutes > 60 ? 360 : (int)((minutes * 360f) / 60); canvas.DrawArc (new RectF (middleX - radius, middleY - radius, middleX + radius, middleY + radius), -90, angle, true, new Paint { Color = color, AntiAlias = true, }); minutes -= 60; color = Color.Rgb ((byte)Math.Max (0, color.R - 30), (byte)Math.Max (0, color.G - 30), (byte)Math.Max (0, color.B - 30)); } // Draw chrome Paint chromeBorder = new Paint { AntiAlias = true, Color = chromeColor, StrokeWidth = 1.ToPixels () }; chromeBorder.SetStyle (Paint.Style.Stroke); canvas.DrawCircle (middleX, middleY, radius, chromeBorder); // Draw markers var markerPaint = new Paint { Color = chromeColor, AntiAlias = true }; var innerRadius = radius - 6; for (int i = 0; i < 8; i++) { var stepAngle = i * Math.PI / 4; canvas.DrawCircle (middleX - (int)Math.Round (Math.Sin (stepAngle) * innerRadius), middleY - (int)Math.Round (Math.Cos (stepAngle) * innerRadius), 1, markerPaint); } }