xamarin - 如何在 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 库。
解决方案
只需在单击擦除时将 SKPaint 更改为这些设置。
paint.BlendMode = SKBlendMode.Src;
paint.Color = SKColors.Transparent;
并回到点击铅笔的时间。
paint.BlendMode = SKBlendMode.SrcOver;
paint.Color = SKColors.Red;
推荐阅读
- javascript - 在 vue 中显示来自 rapidapi 的 API 数据
- javascript - 如何以与 id 数组相同的顺序对对象数组进行排序
- winapi - 如何获取文件的最后修改日期
- database - 基数混淆:users_roles 和角色之间
- sql - SQL Server:为 SELECT 语句爆炸 CSV
- reactjs - 从 React JS 应用程序访问公共资产到其他应用程序
- reactjs - 如何等待 promise 解决并更新状态
- node.js - 如何从 Nextjs 中的另一个 api 处理程序的 api 处理程序中获取数据?
- java - 而不是 Value(Long) Null 在 JSP 中传递,因此正确的值不会显示在 JSP 页面中
- python - Pyranges中重叠和相交方法的区别