【发布时间】:2020-11-06 08:06:02
【问题描述】:
我正在尝试在 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 库。
【问题讨论】:
-
您想擦除特定路径,还是想要更多像绘图程序中的手绘橡皮擦?
-
是的,手绘,用户可以在他们想要的地方删除或擦除。
-
只是像平常一样捕获路径,但是将颜色设置为画布的背景色
-
我想过这个,但我不确定,这是不是正确的方法。因为这样会添加一个新路径,这会增加列表的大小,可能会影响内存。
-
我已经做到了,效果很好。路径是一个非常小的数据结构。任何其他方法仍然需要捕获类似路径的结构以允许徒手。
标签: xamarin drawing skiasharp eraser