Как исправить 'Fatal Signal 11' при перерисовке на SKCanvas - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь перерисовать фигуру, отображаемую на SKCanvas, метод (ChangeShape) работает нормально при первом вызове из обработчика PaintSurface, но когда я пытаюсь вызвать его снова, приложение вылетает, и я получаю сообщение об ошибке "Неустранимый сигнал11 (SIGSEGV), код 1 (SEGV_MAPERR) ".

Я попытался вызвать обработчик напрямую и инициализировать совершенно новую SKSurface, но это все равно приводит к той же ошибке.

public LinearLayout ImageDivisionLayout_Obj;
public SKCanvasView ImageViewActivity_Obj;
public SKSurface ImageCanvas;
public SKCanvas canvasSK;

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.activity_image);

    ImageViewActivity_Obj = new SKCanvasView(this);
    ImageViewActivity_Obj.PaintSurface += ImageViewActivity_Obj_PaintSurface;
    ImageDivisionLayout_Obj = (LinearLayout)FindViewById(Resource.Id.ImageLayoutDivision);
    ImageDivisionLayout_Obj.AddView(ImageViewActivity_Obj);
private void ImageViewActivity_Obj_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
    SKImageInfo info = e.Info;
    SKSurface surface = e.Surface;
    ImageCanvas = surface;
    SetupCanvas();
}

public void SetupCanvas()
{
    ShapePaint = new SKPaint();
    ShapePaint.Color = SKColor.Parse("#F00000");
    ShapePaint.StrokeWidth = 25;
    ShapePaint.Style = SKPaintStyle.Stroke;

    ImageCanvas.Canvas.DrawBitmap(
        AndroidExtensions.ToSKBitmap(ImageTaken),
        new SKRect(0, 0, ImageViewActivity_Obj.Width, 
        ImageViewActivity_Obj.Height));

    ChangeShape();

    ImageCanvas.Canvas.Save();
}

public void ChangeShape()
{
    float X1 = CurrentShape.X;
    float Y1 = CurrentShape.Y;
    float X2 = CurrentShape.X + CurrentShape.width;
    float Y2 = CurrentShape.Y + CurrentShape.height;

    if (CurrentShape.name == "Rectangle")
    {
        ImageCanvas.Canvas.DrawRect(X1, Y1, X2, Y2, ShapePaint);
    }
    else if (CurrentShape.name == "Circle")
    {
        ImageCanvas.Canvas.DrawCircle(new SKPoint(X2 - X1, Y2 - Y1), CurrentShape.width / 2, ShapePaint);
    }
}

...