Я пытаюсь перерисовать фигуру, отображаемую на 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);
}
}