2012-04-12 60 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