2012-11-08 2 views
7

「親座標のヒット矩形」しかし、それはどういう意味ですか?Android関数View.getHitRect()によって提供される値の定義は何ですか?

増幅するために、私が本当に知りたいのは、フレーズ「ヒット矩形」の意味です。それはなんのためですか?フレームワークはそれをどのように処理しますか?ライフサイクルの中で戻り値は意味がありますか? getLeft()getTop()getRight()getBottom()で定義されている長方形とどう違うのですか?

私はもちろん、答えで推測できる関数の名前に基づいて、いくつかの例を試してみるが、それは満足のいくものではない。この機能については、Androidデベロッパーのウェブサイトや他の場所では役に立たないことがあります。

bottomトップyは矩形の底の座標を指定し

  • を左:戻される

  • 答えて

    4

    Hereが最も完全な説明であるようです。

    getHitRect()メソッドは、親の座標内で子のヒット矩形(touchable 領域)を取得します。

    例スニペットは、効果的に彼らは確かに文書化のより良い仕事をする必要がありますTouchDelegate

    0

    Rectは、4つの値を含んでいます。 leftは、矩形の左側のx座標を指定します。

    親座標は、ヒット矩形の値が親の座標系で指定されていることを意味します。

    夜にオープンフィールドに立って、月を見つめていると想像してください。地球上のあなたの立場は、いろいろな形で表現できます。

    あなたのローカル座標系であなたの位置を表した場合、あなたは(緯度/経度)(0、0)に位置します。あなたが歩き回っているとき、あなたのローカル座標系は決して変化しません、あなたは常にあなたのローカル座標系の中心に(0,0)です。

    しかし、地球の座標系を使用して自分の位置を表現した場合、(緯度、経度)(16,135)になっている可能性があります。

    あなたは地球上に立っているので、地球はあなたの親座標系です。

    同様に、ViewはLinearLayoutに含まれることがあります。 LinearLayoutはViewの親であるため、getHitRect()の値はLinearLayoutの座標系で表されます。

    一般的な用語で編集

    ヒット矩形は、衝突検出のために使用される矩形領域を定義するために使用される用語です。 Androidの場合、ヒット矩形はRect型のインスタンスに過ぎません。

    メソッドgetLeft()などは、Rect内のデータのアクセサにすぎません。したがって、Rectのメンバーは、メソッドを呼び出すことで得られるのと同じ長方形を定義します。

    のRectのための一般的な使用シナリオをタップイベントを処理することになります。

    //Imagine you have some Rect named myRect 
    //And some tap event named event 
    //Check if the tap event was inside the rectangle 
    if(myRect.contains(event.getX(), event.getY()){ 
        //it's a hit! 
    } 
    

    あなたは、2つの矩形のはお互いに見るために

    if(myRect.contains(myRect2)){ 
        //collision! 
    } 
    

    、ヒット矩形と交差するかどうかを確認したい場合があります実際に直接使用されていない、あなたはsee the sourceすることができます。ビューの上、下、左、右は1トンで使用されますが、getHitRect()メソッドは、きちんとしたパッケージでそれらを必要とする人々にそれらのパラメータ(上/下/左/右)を返す利便性のほうがよります。

    +0

    ありがとう、私の編集をご覧ください。 – JulianSymes

    +1

    編集していただきありがとうございますが、多少のご質問をお待ちしております。あなたが指すコードは、getHitRect()がgetLeft()、getTop()などで定義された矩形を返すことがあることを示しますが、必ずしもそうではありません。違いは何ですか?私が特に尋ねるのは、意味のある意味論的な意味で、関数が返す矩形です。この関数は、正確な答えがなければ価値がないことに気づくでしょう。私は、関数のドキュメントでは何の振る舞いも指定していないので、何も保証されないので、事実上使用できません。私はそれを避けるだろう。 – JulianSymes

    1

    を作成することによって、それを拡張するために、(レイアウト後の)子ビューの現在の触れる面積を決定するための機能を使用しています。ソースView#getHitRect(Rect)を見ると、ビューに「単位行列」があるか、またはウィンドウにアタッチされていない場合、ビューが正確に何を考えているかが返されます。代替ブランチは、ビューに変換があることを意味します。したがって、ビューの座標系で可能な最小の矩形である親に対して 'ヒット矩形'を取得するには、矩形を原点に移動し、変換を実行してから元の位置に戻します。

    変換がない場合は、この目的のためのショートカットとして使用できます。変換がある場合は、現在表示されているビューの外側または内側にある矩形の値を取得することに注意してください。

    関連する問題