private void LineChart_PaintSurface(object sender, SKPaintSurfaceEventArgs e) { if (ChartEntries?.Any() != true) { return; } var info = e.Info; var canvas = e.Surface.Canvas; canvas.Clear(); var frame = CreateFrame(info); var chart = CreateChart(frame); DrawFrame(canvas, frame); DrawVerticalLabels(canvas, frame, chart); if (ChartEntries.Any(x => x.IsVisible)) { CalculateChartValuesXPoints(chart); foreach (var entry in ChartEntries.Where(x => x.IsVisible).OrderByDescending(x => x.Items.Count())) { CalculatePoints(entry.Items, frame, chart); } DrawBars(canvas, frame, chart); } DrawHorizontalLabels(canvas, frame, chart); }
private void LineChart_PaintSurface(object sender, SKPaintSurfaceEventArgs e) { if (ChartEntries?.Any() != true) { return; } var info = e.Info; var canvas = e.Surface.Canvas; canvas.Clear(); var frame = CreateFrame(info); var chart = CreateChart(frame); if (!IsInitialized) { // Makes slider first init in middle of frame TouchedPoint = new SKPoint(frame.MidX, 0); } DrawVerticalLabels(canvas, frame, chart); if (ChartEntries.Any(x => x.IsVisible)) { CalculateChartValuesXPoints(chart); DrawBackground(canvas, frame); DrawInnerFrame(canvas, frame); if (!string.IsNullOrEmpty(SelectedTag) && !isTouching) { var selectedTagPosition = ChartValueItemsXPoints.FirstOrDefault(x => x.Item1.ToString() == SelectedTag)?.Item2 ?? 0f; TouchedPoint = new SKPoint(selectedTagPosition, 0f); } DrawSlider(canvas, frame, chart); foreach (var entry in ChartEntries.Where(x => x.IsVisible).OrderByDescending(x => x.Items.Count())) { DrawLines(entry, canvas, CalculatePoints(entry.Items, frame, chart)); } DrawHorizontalLabels(canvas, frame, chart); // Get items on x axis var valueItems = ChartEntries.GetChartValueItemFromX(chart.GetInsideXValue(TouchedPoint.X), frame, frame.GetItemWidth(MaxItems)); // Send selected items with command SelectedValuesCommand?.Execute(new SelectedChartValueItemArgs { ChartValueItems = valueItems, TouchedPoint = new SKPoint(chart.GetInsideXValue(TouchedPoint.X), TouchedPoint.Y) }); DrawHorizontalLabel(valueItems?.FirstOrDefault()?.ChartValueItem, canvas, frame, chart); DrawFrame(canvas, frame); DrawSliderPoints(valueItems, canvas, chart); } else { DrawInnerFrame(canvas, frame); DrawFrame(canvas, frame); } IsInitialized = true; }