当前位置: 首页 > 面试题库 >

如何判断封闭路径是否包含给定点?

池阳伯
2023-03-14
问题内容

在Android中,我有一个Path对象,我碰巧知道它定义了一条闭合路径,因此我需要弄清楚路径中是否包含给定点。我所希望的是一些类似的东西

path.contains(int x,int y)

但这似乎并不存在。

我要这样做的特定原因是因为我在屏幕上有一组形状定义为路径,并且我想弄清楚用户单击了哪个形状。如果有更好的方法来解决这一问题,例如使用不同的UI元素,而不是自己“艰难地”进行操作,我愿意提出建议。

如果需要的话,我愿意自己编写算法,但这意味着我猜需要进行不同的研究。


问题答案:

本android.graphics.Path类没有这样的方法。Canvas类确实具有可以设置为路径的剪切区域,无法针对某个点对其进行测试。您可以尝试Canvas.quickReject,针对单点矩形(或1x1Rect)进行测试。我不知道这是否真的会检查路径还是仅检查封闭的矩形。

Region类显然只跟踪包含的矩形。

您可以考虑将每个区域绘制到一个8位的alpha层位图中,并在每个区域中Path填入自己的“颜色”值(确保在中关闭了抗锯齿功能Paint)。这为每个填充有填充路径的索引的路径创建了一种掩码。然后,您可以仅使用像素值作为路径列表的索引。

Bitmap lookup = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
//do this so that regions outside any path have a default
//path index of 255
lookup.eraseColor(0xFF000000);

Canvas canvas = new Canvas(lookup);
Paint paint = new Paint();

//these are defaults, you only need them if reusing a Paint
paint.setAntiAlias(false);
paint.setStyle(Paint.Style.FILL);

for(int i=0;i<paths.size();i++)
    {
    paint.setColor(i<<24); // use only alpha value for color 0xXX000000
    canvas.drawPath(paths.get(i), paint); 
    }

然后查点

int pathIndex = lookup.getPixel(x, y);
pathIndex >>>= 24;

如果有未填充的点,请确保检查255(无路径)。



 类似资料:
  • 本文向大家介绍JavaScript判断数组是否包含指定元素的方法,包括了JavaScript判断数组是否包含指定元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript判断数组是否包含指定元素的方法。分享给大家供大家参考。具体如下: 这段代码通过prototype定义了数组方法,这样就可以在任意数组调用contains方法 用法: 希望本文所述对大家的javascri

  • 问题内容: 我试图找到给定的路径是否可能是使用java的另一个路径的子级。这两个路径可能不存在。 说是可能的孩子。 目前,我正在与 问题答案: 您还可以使用 java.nio.file.Path 轻松完成此操作。该 java.nio.file.Path.startsWith 方法似乎是处理所有可能的情况。 例: 输出 如果需要更高的可靠性,可以使用“ toRealPath”代替“ toAbsolu

  • 本文向大家介绍剑指offer之判断链表是否包含环,包括了剑指offer之判断链表是否包含环的使用技巧和注意事项,需要的朋友参考一下 1 问题 判断链表是否包含环 2 思路 2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。 3 代码实现 4 运行结果 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对呐喊教程的支持。如果你想了解更

  • 主要内容:对无序数组的查询,对有序数组的查询在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家长想知道他的孩子是否进入了实验班,只要提供孩子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入。 不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。 对无序数组的查询 所谓无序数组,就是数组元素的排列没有规律

  • 问题内容: 我正在阅读面向对象的Javascript,并发现了闭包的概念。我不太明白为什么以及何时使用它。其他语言(例如Java)也有闭包吗?我基本上想了解了解闭包的概念如何帮助我改善编码。 问题答案: 闭包是具有绑定变量的第一类函数。 大致意味着: 您可以将闭包作为参数传递给其他函数 闭包存储创建时存在的词法作用域中某些变量的值 Java最初没有对闭包的语法支持(Java 8中引入了闭包),尽管

  • 有没有可能通过JSONPath知道其他“路径”的存在? 我所说的现有“路径”是指类似于此JSON的“a.b.c”或“a.b.d”形式的字符串: 可以写一个JSONPath来判断除了a. b. c和a. b. d之外是否还有其他“路径”吗? 例如,在下面的JSON中,它应该发现有属性'e':