3

次のようなネストされたビュー V を持つカスタム レイアウトがあります: LinearLayout L1 ---> LinearLayout L2 ---> View V.

V 用に登録された OnTouchListener があります。タッチ イベントでは、ビュー V のエッジに対するタッチ イベントの座標を取得する必要があります。

event.getX() と event.getY() によって返される値は何に関連していますか? これらの値はすでにビュー V のエッジに対して相対的であると言う人もいれば、ビュー V のエッジ座標を event.getX() と event.getY() から差し引いて相対値を取得する必要があると言う人もいます。座標。

ご協力いただきありがとうございます。

4

1 に答える 1

5

Google のドキュメントから

getX()メソッド:

このビューの視覚的な x 位置 (ピクセル単位)。これは、translationX プロパティに現在の left プロパティを加えたものと同じです。

setTranslationX()メソッド:

このビューの左位置に対する水平位置を設定します。これにより、オブジェクトのレイアウトによって配置された場所に加えて、レイアウト後にオブジェクトが効果的に配置されます。

getLeft()メソッド:

親に対するこのビューの左の位置。

したがって、getX() は、親に対するビューの水平位置を返します。

アップデート:

あなたが得る結果はevent.getX()、親に対しても相対的です。水平方向に中央揃えの RelativeLayout 内にボタンを配置することで簡単なテストを実行し、ボタンをクリックしたときに値を確認できます。

あなたのレイアウトxmlで:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_centerHorizontal="true">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

あなたの活動で:

    mBtn = ((Button) findViewById( R.id.button1 ));
    mBtn.setOnTouchListener( new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.d("", "getX = " + event.getX());
            return false;
        }
    });

左マージンのボタンをクリックすると、0.0 に近い値が得られます。

于 2012-06-01T18:15:34.770 に答える