2012-06-25 11 views
5

私はアンドロイドコード内に2つのパスオブジェクトを持っています。これらのパスが交差しているかどうかを確認するためにすべての方法を試しましたが、できません。どのようにパスが交差しているかどうかを確認することができます。任意の良好な応答を感謝..... おかげで、アンドロイドのパス交差

答えて

4

は、私はそれをRegion.op

を見て試していないしているが、私は使用することをお勧め:

Region.setPath(Path path, Region clip); 

から地域を取得しますあなたのパスの両方、その後、あなたは使用することができます。

if (region1.op(region2,Region.Op.INTERSECT)) { 
    // intersection 
} 

を交差点をチェックするために...

+1

リージョンは、パスを含む矩形を作成しますか?私のパスは曲線を持っています。私は、領域を作成すると効果があるとは思っていません。パスを含む矩形を作成するだけではありません。 –

+4

"これにより、パスに描画されるピクセル(アンチエイリアシングなし)と同じ領域が生成されます。 " – Dirk

+0

region1にregion2全体とその境界が含まれている場合、op()は何を返しますか? /輪郭線が交差していないのですか?つまり、2つの別々のケースを確認する方法1.Region交差点と2. Path intersection – usman

6

Dheerajによって与えられた答えは、あなたの質問に答えました:

https://stackoverflow.com/a/9918830/1268168

は、ここで彼の答えのコピー&ペーストです:

私は考えることができるもう一つの方法は、で動作しますパスを使って構築できる単純なオブジェクト。

あなたはその境界のパスで表現されている2つのオブジェクトを持っていたら、あなたはこの試みることがありますが、パスとしてあなたのオブジェクトを持っていたら、あなたは直接drawPath()を使用して描画することができ

Path path1 = new Path(); 
path1.addCircle(10, 10, 4, Path.Direction.CW); 
Path path2 = new Path(); 
path2.addCircle(15, 15, 8, Path.Direction.CW); 

Region region1 = new Region(); 
region1.setPath(path1, clip); 
Region region2 = new Region(); 
region2.setPath(path2, clip); 

if (!region1.quickReject(region2) && region1.op(region2, Region.Op.INTERSECT)) { 
    // Collision! 
} 

を。また、パスをtransform()することで移動を実行することもできます。

私の理解から、上記のコードの変数 "clip"は、パスの境界ボックスにする必要があります。一般的な目的のために私は、レイアウトの幅と高さは、キャンバスや活動または任意のサイズにすることができ

Region clip = new Region(0, 0, layoutWidth, layoutHeight); 

を使用しています。

6

API19以降、Pathは現在op()メソッドを持っています。

boolean intersects = path.op(p1,p2,Path.Op.INTERSECT) 
+1

戻り値は、交差するかどうかではなく、操作の成功を示します。交差をチェックするには、結果がisEmpty()であるかどうかを確認する必要があります。クイックテスト:パスとして角度ポリラインを作成し、交差しない角度の内側に位置する単一のラインパスを作成し、それらを交差させて表示します。 –