在 Xamarin 中使用 SkiaSharp 动态绘制线条
Dynamically draw lines with SkiaSharp in Xamarin
我正在尝试使用包 SkiaSharp 动态绘制线条。
我在 xaml 中这样定义控件:
<skia:SKCanvasView x:Name="CanvasView" PaintSurface="OnCanvasViewPaintSurface" />
这是我背后的代码 class:
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 字段,但它不起作用。使用 canvas 对象时,应用程序将在运行时崩溃。
我做错了什么?
您需要使用SKCanvasView.InvalidateSurface()方法在内部调用OnCanvasViewPaintSurface()。
我正在尝试使用包 SkiaSharp 动态绘制线条。
我在 xaml 中这样定义控件:
<skia:SKCanvasView x:Name="CanvasView" PaintSurface="OnCanvasViewPaintSurface" />
这是我背后的代码 class:
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 字段,但它不起作用。使用 canvas 对象时,应用程序将在运行时崩溃。
我做错了什么?
您需要使用SKCanvasView.InvalidateSurface()方法在内部调用OnCanvasViewPaintSurface()。