クローズドパスが指定された点が含まれている場合はどうすればわかりますか?

? Tom Seago @ | Original: StackOverFlow

アンドロイドでは、私は、閉じたパスを定義知ることが起こるPathオブジェクトを持っている、と私は与えられたポイントがパスの中に含まれているかどうかを把握する必要があります。私は期待していたことの線に沿って何かだった

path.contains ( int型のx、 int型のY )

それは存在していないようです。

私はパスとして定義され、画面上の図形のコレクションを持っている、と私は、ユーザーがクリックした1把握したいので、私はこの探している具体的な理由がある。より良い方法は、異なるUI要素を使用してのではなく、 「ハードな方法"自分にそれをやって、このような近づい易いという問題がある場合、私は提案を開いている。

私は私が持っている場合、アルゴリズムを自分で書いてを開いているが、それは私が推測する別の研究を意味します。



Top 5 Respuesta

1Brian @

「 ____ 」クラスには、このような方法がありません。 Canvasクラスパスに設定することができるクリッピング領域があるのか​​、ポイントに対してテストする方法はありません。あなたは、一点の長方形(または1x1の「 ____ 」 )に対してテストし、 Canvas.quickRejectをしてみてください。それは実際にも、パスまたは単に囲む矩形に対してチェックするかどうかは知りません。

地域クラスは明らかにのみ含む長方形を追跡します。

あなたは、 8ビットのアルファ層ビットマップにあなたの領域のそれぞれを描く検討するかもしれない各「 ____ 」 (ことを確認してくださいアンチエイリアシングがあなたの「 ____ 」でオフになっている)それ自身の「色」の値で満たされた。これは、それを埋めパスへのインデックスで満たされた各パスのマスクのようなものを作成します。次に、あなただけのパスのリストへのインデックスとしての画素値を使用することができます。

android.graphics.Path

その後、ポイントを見て、

Rect

未充填点がございましたら、 255 (パスなし)のために確認してください。



2Randy Findley @

ここで私がやったし、それが動作しているようです:

Path

今、あなたはregion.contians ( x、y)のメソッドを使用することができます。

Paint

** 2010年6月7日に更新** region.setPath法はrectFが大きすぎると私のアプリが(警告メッセージ)をクラッシュしないことになります。ここに私の解決策は、次のとおりです。

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); 
    }
3Jesse Wilson @

WebKitのhttp://www.opensource.apple.com/source/WebCore/WebCore-658.28/platform/graphics/skia/SkiaUtils.cppはランディフィンドリーのバグの回避策C ++を持って:

int pathIndex = lookup.getPixel(x, y);
pathIndex >>>= 24;
4Cal Hinshaw @

私はパーティーに少し遅れてんだけど、私はポイントが多角形であるか否かを判定するようにそれを考えて、この問題を解決するだろう。

http://en.wikipedia.org/wiki/Point_in_polygon

あなたが代わりに線分のベジェスプラインを見ているが、ポイントはまだ動作から線を描画しているとき、数学はよりゆっくりと計算します。