ビューの左上隅の絶対画面ピクセル座標を取得しようとしています。しかし、私が見つけることができるすべてのメソッドは、ビューの親に相対的であるように見えるため、機能getLeft()
しgetRight()
ません0
。これを行う適切な方法は何ですか?
それが役立つ場合、これは「写真を元に戻す」ゲーム用です。ユーザーがボックスを描画して複数のピースを選択できるようにしたい。私の推測では、これを行う最も簡単な方法は、とgetRawX()
の間を行き来し、それらの値を、ピースを保持しているレイアウトの左上隅と比較することです。ピースのサイズがわかれば、選択されたピースの数を判断できます。でとを使用できることはわかっていますが、相対位置が返されるため、どのピースが選択されたかを判断するのが難しくなります。(不可能ではないことはわかっていますが、不必要に複雑に思えます)。getRawY()
MotionEvent
getX()
getY()
MotionEvent
編集:これは、質問の1つに従って、保持コンテナーのサイズを取得しようとするために使用したコードです。TableLayout
すべてのパズルのピースを保持するテーブルです。
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
編集2:これが私が試したコードで、提案された回答の詳細に従っています。
public int[] tableLayoutCorners = new int[2];
(...)
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
+ ", " + corners.bottom);
cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);
このコードは、すべての初期化が完了した後に追加されました。画像は、TableLayout
. Cells[0] は左上ImageView
で、cells[4] を選択しました。これは、中央のどこかにあり、(0,0) の座標を持つべきではないためです。
上記のコードでは、ログにすべて 0 が記録されますが、さまざまなパズルのピースが正しく表示されているため、実際には理解できません。(私は、tableLayoutCorners とデフォルトの可視性の public int を試しましたが、どちらも同じ結果が得られました。)
これが重要かどうかはわかりませんが、ImageView
sにはもともとサイズが与えられていません。sのサイズは、ImageView
表示する画像を与えると、初期化中に View によって自動的に決定されます。ロギング コードは画像が与えられ、自動的にサイズ変更された後であるにもかかわらず、これは値が 0 になることに貢献できますか? これに対抗する可能性があるため、上記のコードを追加しましたtableLayout.requestLayout()
が、役に立ちませんでした。