public async Task drawGaugeAsync() { // Radial Gauge Constants int uPadding = 150; int side = 500; int radialGaugeWidth = 25; // Line TextSize inside Radial Gauge int lineSize1 = 220; int lineSize2 = 70; int lineSize3 = 80; // Line Y Coordinate inside Radial Gauge int lineHeight1 = 100; int lineHeight2 = 200; int lineHeight3 = 300; // Start & End Angle for Radial Gauge float startAngle = -220; float sweepAngle = 260; // Getting Canvas Info SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; progressUtils.setDevice(info.Height, info.Width); canvas.Clear(); // Getting Device Specific Screen Values // ------------------------------------------------- // Top Padding for Radial Gauge float upperPading = progressUtils.getFactoredHeight(uPadding); /* Coordinate Plotting for Radial Gauge * * (X1,Y1) ------------ * | (XC,YC) | * | . | * Y | | * | | * ------------ (X2,Y2)) * X * * To fit a perfect Circle inside --> X==Y * i.e It should be a Square */ // Xc & Yc are center of the Circle int Xc = info.Width / 2; float Yc = progressUtils.getFactoredHeight(side); // X1 Y1 are lefttop cordiates of rectange int X1 = (int)(Xc - Yc); int Y1 = (int)(Yc - Yc + upperPading); // X2 Y2 are rightbottom cordiates of rectange int X2 = (int)(Xc + Yc); int Y2 = (int)(Yc + Yc + upperPading); // Empty Gauge Styling SKPaint paint1 = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.FromHex("#e0dfdf").ToSKColor(), // Colour of Radial Gauge StrokeWidth = progressUtils.getFactoredWidth(radialGaugeWidth), // Width of Radial Gauge StrokeCap = SKStrokeCap.Round // Round Corners for Radial Gauge }; // Filled Gauge Styling SKPaint paint2 = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.FromHex("#05c782").ToSKColor(), // Overlay Colour of Radial Gauge StrokeWidth = progressUtils.getFactoredWidth(radialGaugeWidth), // Overlay Width of Radial Gauge StrokeCap = SKStrokeCap.Round // Round Corners for Radial Gauge }; // Defining boundaries for Gauge SKRect rect = new SKRect(X1, Y1, X2, Y2); //canvas.DrawRect(rect, paint1); //canvas.DrawOval(rect, paint1); // Rendering Empty Gauge SKPath path1 = new SKPath(); path1.AddArc(rect, startAngle, sweepAngle); canvas.DrawPath(path1, paint1); // Rendering Filled Gauge SKPath path2 = new SKPath(); path2.AddArc(rect, startAngle, (float)sweepAngleSlider.Value); canvas.DrawPath(path2, paint2); //---------------- Drawing Text Over Gauge --------------------------- // Achieved Minutes using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#676a69"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize1); skPaint.Typeface = SKTypeface.FromFamilyName( "Arial", SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Upright); // Drawing Achieved Minutes Over Radial Gauge if (sw_listToggle.IsToggled) { canvas.DrawText(TotalRecords + "", Xc, Yc + progressUtils.getFactoredHeight(lineHeight1), skPaint); } else { canvas.DrawText(TotalRecords + "", Xc, Yc + progressUtils.getFactoredHeight(lineHeight1), skPaint); } } // Achieved Minutes Text Styling using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#676a69"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize2); canvas.DrawText("Minutes", Xc, Yc + progressUtils.getFactoredHeight(lineHeight2), skPaint); } // Goal Minutes Text Styling using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#e2797a"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize3); // Drawing Text Over Radial Gauge if (sw_listToggle.IsToggled) { canvas.DrawText(ProgressText + TotalRecords + " record(s)", Xc, Yc + progressUtils.getFactoredHeight(lineHeight3), skPaint); } else { canvas.DrawText(ProgressText + TotalRecords / 100 + " record(s)", Xc, Yc + progressUtils.getFactoredHeight(lineHeight3), skPaint); } } }
public async Task drawGaugeAsync() { // Radial Gauge Constants int uPadding = 150; int side = 500; int radialGaugeWidth = 55; // Line TextSize inside Radial Gauge int lineSize1 = 220; int lineSize2 = 70; int lineSize3 = 80; int lineSize4 = 100; // Line Y Coordinate inside Radial Gauge int lineHeight1 = 70; int lineHeight2 = 170; int lineHeight3 = 270; int lineHeight4 = 370; int lineHeight5 = 530; // Start & End Angle for Radial Gauge float startAngle = -220; float sweepAngle = 260; try { // Getting Canvas Info SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; progressUtils.setDevice(info.Height, info.Width); canvas.Clear(); SKBlendMode blend = SKBlendMode.SrcIn; canvas.DrawColor(Color.White.ToSKColor(), blend); // Getting Device Specific Screen Values // ------------------------------------------------- // Top Padding for Radial Gauge float upperPading = progressUtils.getFactoredHeight(uPadding); /* Coordinate Plotting for Radial Gauge * * (X1,Y1) ------------ * | (XC,YC) | * | . | * Y | | * | | * ------------ (X2,Y2)) * X * * To fit a perfect Circle inside --> X==Y * i.e It should be a Square */ // Xc & Yc are center of the Circle int Xc = info.Width / 2; float Yc = progressUtils.getFactoredHeight(side); // X1 Y1 are lefttop cordiates of rectange int X1 = (int)(Xc - Yc); int Y1 = (int)(Yc - Yc + upperPading); // X2 Y2 are rightbottom cordiates of rectange int X2 = (int)(Xc + Yc); int Y2 = (int)(Yc + Yc + upperPading); //Loggig Screen Specific Calculated Values Debug.WriteLine("INFO " + info.Width + " - " + info.Height); Debug.WriteLine(" C : " + upperPading + " " + info.Height); Debug.WriteLine(" C : " + Xc + " " + Yc); Debug.WriteLine("XY : " + X1 + " " + Y1); Debug.WriteLine("XY : " + X2 + " " + Y2); // Empty Gauge Styling SKPaint paint1 = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.FromHex("#e0dfdf").ToSKColor(), // Colour of Radial Gauge StrokeWidth = progressUtils.getFactoredWidth(radialGaugeWidth), // Width of Radial Gauge StrokeCap = SKStrokeCap.Round // Round Corners for Radial Gauge }; // Filled Gauge Styling SKPaint paint2 = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.FromHex("#05c782").ToSKColor(), // Overlay Colour of Radial Gauge StrokeWidth = progressUtils.getFactoredWidth(radialGaugeWidth), // Overlay Width of Radial Gauge StrokeCap = SKStrokeCap.Round // Round Corners for Radial Gauge }; // Defining boundaries for Gauge SKRect rect = new SKRect(X1, Y1, X2, Y2); //canvas.DrawRect(rect, paint1); //canvas.DrawOval(rect, paint1); // Rendering Empty Gauge SKPath path1 = new SKPath(); path1.AddArc(rect, startAngle, sweepAngle); canvas.DrawPath(path1, paint1); // Rendering Filled Gauge SKPath path2 = new SKPath(); path2.AddArc(rect, startAngle, (float)sweepAngleSlider.Value); canvas.DrawPath(path2, paint2); //---------------- Drawing Text Over Gauge --------------------------- // Achieved Minutes using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#676a69"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize1); skPaint.Typeface = SKTypeface.FromFamilyName( "Arial", SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Upright); // Drawing Achieved Minutes Over Radial Gauge // if (sw_listToggle.IsToggled) // canvas.DrawText(chartvalue + "", Xc, Yc + progressUtils.getFactoredHeight(lineHeight1), skPaint); // else // canvas.DrawText(dailyWorkout + "", Xc, Yc + progressUtils.getFactoredHeight(lineHeight1), skPaint); } // Achieved Minutes Text Styling using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#676a69"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize2); // canvas.DrawText("Seconds", Xc, Yc + progressUtils.getFactoredHeight(lineHeight2), skPaint); } // Goal Minutes Text Styling using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#e2797a"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize3); skPaint.Typeface = SKTypeface.FromFamilyName( "Arial", SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Upright); // Drawing Text Over Radial Gauge // if (sw_listToggle.IsToggled) // canvas.DrawText(DateTime.Now.ToString("dddd, dd'-'MM'-'yyyy"), Xc, Yc + progressUtils.getFactoredHeight(lineHeight3), skPaint); //else { // canvas.DrawText("Goal " + goal / 30 + " Min", Xc, Yc + progressUtils.getFactoredHeight(lineHeight3), skPaint); } } // Goal Minutes Text Styling using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#e2797a"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize3); skPaint.Typeface = SKTypeface.FromFamilyName( "Arial", SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Upright); // Drawing Text Over Radial Gauge // if (sw_listToggle.IsToggled) // canvas.DrawText(DateTime.Now.ToString("HH:mm:ss"), Xc, Yc + progressUtils.getFactoredHeight(lineHeight4), skPaint); //else { // canvas.DrawText("Goal " + goal / 30 + " Min", Xc, Yc + progressUtils.getFactoredHeight(lineHeight3), skPaint); } } // Goal Minutes Text Styling using (SKPaint skPaint = new SKPaint()) { skPaint.Style = SKPaintStyle.Fill; skPaint.IsAntialias = true; skPaint.Color = SKColor.Parse("#676a69"); skPaint.TextAlign = SKTextAlign.Center; skPaint.TextSize = progressUtils.getFactoredHeight(lineSize4); skPaint.Typeface = SKTypeface.FromFamilyName( "Arial", SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Upright); // Drawing Text Over Radial Gauge // if (sw_listToggle.IsToggled) canvas.DrawText("Battery " + Chartvalue + "%", Xc, Yc + progressUtils.getFactoredHeight(lineHeight5), skPaint); //else { // canvas.DrawText("Goal " + goal / 30 + " Min", Xc, Yc + progressUtils.getFactoredHeight(lineHeight3), skPaint); } } } catch (Exception e) { Debug.WriteLine(e.StackTrace); } }