Динамически рисовать линии с помощью 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().