Динамически рисовать линии с SkiaSharp в Xamarin - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь динамически рисовать линии, используя пакет SkiaSharp.

Я определил элемент управления в моем xaml следующим образом:

<skia:SKCanvasView x:Name="CanvasView" PaintSurface="OnCanvasViewPaintSurface" />

Это мой код класса:

private SkiaSharp.SKCanvas canvas;
private SkiaSharp.SKSurface surface;

void OnCanvasViewPaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs args)
{
    SkiaSharp.SKImageInfo info = args.Info;
    surface = args.Surface;
    canvas = surface.Canvas;

    canvas.Clear();
    SkiaSharp.SKPaint thinLinePaint = new SkiaSharp.SKPaint
    {
        Style = SkiaSharp.SKPaintStyle.Stroke,
        Color = SkiaSharp.SKColors.Blue,
        StrokeWidth = 6
    };
    canvas.DrawLine(0, 0, 50, 50, thinLinePaint);
}

Приведенная выше часть работает нормально, и при загрузке вида будет отображаться синяя линия. Но я хочу динамически рисовать новые линии и удалять старые.

public void DrawNewLine()
{
    canvas.Clear();
    SkiaSharp.SKPaint thickLinePaint = new SkiaSharp.SKPaint
    {
        Style = SkiaSharp.SKPaintStyle.Stroke,
        Color = SkiaSharp.SKColors.Red,
        StrokeWidth = 16
    };
    canvas.DrawLine(0, 0, 50, 50, thickLinePaint);
}

Я использую поле холста, которое было объявлено ранее, но оно не работает. Приложение будет аварийно завершать работу во время выполнения при использовании объекта canvas.

Что я делаю не так?

1 Ответ

0 голосов
/ 12 мая 2018

Вам необходимо использовать метод SKCanvasView.InvalidateSurface () для внутреннего вызова OnCanvasViewPaintSurface ().

...