【问题标题】:SkiaSharp make a bitmap on a path clickableSkiaSharp 在可点击的路径上制作位图
【发布时间】:2020-04-25 15:25:58
【问题描述】:

我已经绘制了一个圆形路径,并且每 1 度角添加一个位图。现在,我想使用 Xamarin 表单收听每个位图在该圆路径上的点击!我怎样才能实现这一点。 我已经在 xamarin 上操作 touches 并开始获取触摸坐标,但无法准确获取选择了哪个位图?

编辑:

 foreach (var item in bitmapPoints)
  {
    using (Stream streami = assembly.GetManifestResourceStream(resID))
    {
      redBitmap = SKBitmap.Decode(streami);
    }
      canvas.DrawBitmap(redBitmap,item, null);
  }

现在我正在尝试为画布上绘制的每个位图启用点击事件。我应该制作具有 HiTest 方法的自定义 BitMap 类吗?如果是这样,应该通过什么 Rect x 和 y 来获取 HiTest?

【问题讨论】:

    标签: xamarin skiasharp xamarin-forms-4


    【解决方案1】:

    这称为“命中测试” - Xamarin 在其 SkiaSharp 文档中有一个 sample

    public bool HitTest(SKPoint location)
    {
        // Invert the matrix
        SKMatrix inverseMatrix;
    
        if (Matrix.TryInvert(out inverseMatrix))
        {
            // Transform the point using the inverted matrix
            SKPoint transformedPoint = inverseMatrix.MapPoint(location);
    
            // Check if it's in the untransformed bitmap rectangle
            SKRect rect = new SKRect(0, 0, bitmap.Width, bitmap.Height);
            return rect.Contains(transformedPoint);
        }
        return false;
    }
    

    【讨论】:

    • Jason 感谢您提供的信息,但是每个位图的“rect”位图应该不同吧?例如:如果我触摸第 9 个位图,我需要获取它的 ID 等等!现在我应该调用 HitTest ForEach 绘制的位图吗?
    • 是的。这正是你需要做的
    • 太棒了!但我的问题是在这里理解 Rect,如代码所示,sn-p rect 总是从 (0,0) 开始,这对我来说不是这种情况,我的 100 个位图也是相同的,具有完全相同的宽度和高度,但它们的不同身份证。您能否提供任何类似的演示源,非常感谢您在这方面的帮助。
    • 我链接到了一篇包含完整源代码的广泛文章。它甚至有一个包含多个位图的示例。此外,如果您的所有位图都以某种模式布局,您也许可以做一些简单的几何图形来解决这个问题
    • 这是一个非常有用的资源链接,也刚刚更新了我的问题!弓。
    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多