首页 > 解决方案 > 如何在 SKCanvasView 上徒手擦除?

问题描述

我正在尝试在 Xamarin.Forms 中制作绘图应用程序。我能够绘制路径。我的问题是,当用户尝试在绘图上擦除时,如何删除部分路径。我尝试了以下方法:

if (IsEraseClicked)
{
    switch (args.Type)
    {
        case TouchActionType.Pressed:
            if (!inProgressPaths.ContainsKey(args.Id))
            {
                SKPath path = new SKPath();
                path.MoveTo(ConvertToPixel(args.Location));
                inProgressPaths.Add(args.Id, path);
                UpdateBitmap();
            }
            break;

        case TouchActionType.Moved:
            if (inProgressPaths.ContainsKey(args.Id))
            {
                SKPath path = inProgressPaths[args.Id];
                path.LineTo(ConvertToPixel(args.Location));
                UpdateBitmap();
            }
            break;

        case TouchActionType.Released:
            if (inProgressPaths.ContainsKey(args.Id))
            {
                if (completedPaths.Contains(inProgressPaths[args.Id]))
                {
                    completedPaths.Remove(inProgressPaths[args.Id]);
                    inProgressPaths.Remove(args.Id);
                    UpdateBitmap();
                }
            }
            break;

        case TouchActionType.Cancelled:
            if (inProgressPaths.ContainsKey(args.Id))
            {
                inProgressPaths.Remove(args.Id);
                UpdateBitmap();
            }
            break;
    }
}

我正在使用 SkiaSharp 库。

标签: xamarindrawingskiasharperaser

解决方案


只需在单击擦除时将 SKPaint 更改为这些设置。

paint.BlendMode = SKBlendMode.Src;
paint.Color = SKColors.Transparent;

并回到点击铅笔的时间。

paint.BlendMode = SKBlendMode.SrcOver;
paint.Color = SKColors.Red;

推荐阅读