1

XML ファイルで を使用してImageView、レイアウトの中央にピンを配置します。android:layout_centerInParent="true"RelativaLayout

ここに画像の説明を入力

次に、キャンバス上のピンと同じ位置に緑色の点を描きたいと思います。

:緑の点はビューではありません。キャンバスに描かれていますcanvas.drawCircle();

つまり、ピンの座標をプログラムで取得する必要があります。

android:layout_centerInParent="true"では、コードで座標を取得するにはどうすればよいですか?

4

4 に答える 4

2

私の推測では

layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1);

でlayoutParamsを取得できます。変更が完了したら、戻るrelativeLayout.getLayoutParams()ことを忘れないでくださいsetLayoutParams

于 2013-07-15T02:08:37.113 に答える
2

親の幅と高さを取得するには、これを行うことができます。

RelativeLayout parent = (RelativeLayout) findViewById(R.id.yourRelativeLayout);
int width = parent.getWidth();
int height = parent.getHeight();

次に、これらの数値を 2 で割り、それを緑色の点の座標として設定すると、画面の中央に表示されます。これが機能するには、キャンバスのサイズが相対的なレイアウトと同じである必要があります。

ただし、アクティビティが作成された後にメソッドを呼び出す必要があることに注意してください。そうしないと、最終的にゼロになってしまいgetWidth()ます。この回答を参照してくださいgetHeight()

于 2013-07-15T02:08:52.767 に答える
1

では、描画先のキャンバスは RelativeLayout に含まれるビューにありますが、RelativeLayout の中心にドットを描画したいですか?

はい、それはまさに私がやろうとしていることです!

キャンバス ビューが RealtiveLayout の直接の子であると仮定すると、これは機能するはずです。

getWidth() / 2他の人が述べたように、レイアウト上でおよびを使用して、レイアウトの中心を取得できますgetHeight() / 2。ただし、キャンバスの原点がどこにあるのかを把握する必要もあります。これには、キャンバス ビューでgetLeft ()getTop( ) を使用するだけです。次に、左から中央の x を減算し、上から中央の y を減算して、最終的な場所を取得します。

例:

グリッド

各グリッド線が であると仮定します1。はRelativeLayout大きな黒い四角形で、Canvasビューは青い四角形です。中心点の座標は4,6. left/top を使用1,4して、キャンバスの原点 (赤い点) を取得します。を引くと が得られます3,2。これは、緑色のドットのローカル キャンバス座標です。

于 2013-07-15T03:11:20.853 に答える
0

キャンバスの中央にドットを描画するには、ビューの幅と高さを 2 で割るだけです。(真の中心ではなく) ピンのベースに配置する場合は、ピンの高さの半分を円のy値に追加します。

于 2013-07-15T02:06:16.840 に答える