2012-04-12 46 views
5

enter image description here我想知道是否有某种方法可以检测当前绘制的路径是否触及/穿过现有路径。现有路径不是绘制就是背景图像的一部分。 这也将是有帮助的,如果我能够在之后找到这个,则当前路径被完全绘制。 在最糟糕的情况下,我可以进行逐像素检查以查看两条路径是否正在接触?在Android中检测重叠路径

+0

添加一个链接到它的外观截图和最新看到了一些引用有助于澄清事情有点。 – erbsman 2012-04-12 12:38:46

+0

添加屏幕截图。 – deeJ 2012-04-12 14:36:45

回答

0

使用路径定义行,然后将android.graphics.Region设置为该路径。后来核对对方所有地区它们是否相交或不

region1.op(region2, Op.INTERSECT); 
+0

这肯定不起作用,因为一个区域是封闭的路径,而且他并不是始终绘制封闭的路径?或者我在这里错过了什么? – erbsman 2012-04-12 10:44:55

+0

如果他画了一些东西,它将在x和y维度上都有一个宽度。他可以在它周围建立一条闭合的路径,至少是一个像素宽度。 – Bondax 2012-04-12 10:48:40

+0

任何想法如何从PointF []数组创建路径?我已经得到了这个数组中所有点的坐标。 – deeJ 2012-04-13 10:09:15

0

您可以将行保存在List中,然后根据列表中的每一行检查您正在绘制的行,看看它是否相交。你会发现很多关于如何在stackoverflow中检测线交叉的答案。

ArrayList<Pair<Pair<Integer,Integer>,Pair<Integer,Integer>>> lineList = new ArrayList<Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>>(); 

    // add all your lines to the list 
    // lineList.add(line); 

    // handle the last line 
    int startX = 10; 
    int startY = 20; 
    int endX = 40; 
    int endY = 50; 

    Pair<Integer,Integer> lineStart = new Pair<Integer, Integer>(startX, startY); 
    Pair<Integer,Integer> lineEnd = new Pair<Integer, Integer>(startX, startY); 
    Pair<Pair<Integer,Integer>,Pair<Integer,Integer>> lastLine = new Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>(lineStart, lineEnd); 

    for(Pair<Pair<Integer,Integer>,Pair<Integer,Integer>> l: lineList){ 
     // if "lastLine" intersects "l" do you stuff 
    } 
+0

我想知道如何在列表中保存一行。我保存线的所有像素的坐标? – deeJ 2012-04-12 09:14:24

+0

只保存一对配对。 int startX = 10; int startY = 20; int endX = 40; int endY = 50; Pair lineStart = new Pair (startX,startY); Pair lineEnd = new Pair (startX,startY); Pair ,Pair > line = new Pair(lineStart,lineEnd); – erbsman 2012-04-12 09:51:01

+0

这不适用于曲线,对吧?如果问题没有暗示,我很抱歉。 – deeJ 2012-04-12 10:12:18