Динамически рисовать линии с помощью SkiaSharp в Xamarin

Я пытаюсь динамически рисовать линии, используя пакет 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 ответ

Решение

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

Другие вопросы по тегам