[解決済み] ビューの絶対座標を取得する方法
質問
ビューの左上隅の絶対画面ピクセル座標を取得しようとしています。しかし、私が見つけることができるすべてのメソッドは、次のとおりです。
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]);
このコードは、すべての初期化が完了した後に追加されました。画像はImageViewsの配列(cell[]配列)に分割され、その配列は
TableLayout
. Cells[0]は左上の
ImageView
そして、cell[4]は真ん中のどこかにあり、間違いなく座標が(0,0)になってはいけないと思い、選びました。
上記のコードでは、ログにすべて0が表示されてしまいます。(tableLayoutCorners と default visibility に public int を試してみましたが、どちらも同じ結果でした)。
意味があるかどうかわかりませんが
ImageView
は、もともとサイズが与えられていません。サイズは
ImageView
は、初期化中に、表示する画像を与えると、Viewが自動的に決定します。このため、画像が表示され、自動的にサイズが変更された後のログ記録であるにもかかわらず、値が0になっているのではないでしょうか?この問題に対処するために、私は以下のコードを追加しました。
tableLayout.requestLayout()
を上記のようにしましたが、それでもダメでした。
解決方法は?
使用方法
View.getLocationOnScreen()
または
getLocationInWindow()
.
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
Android Bluetooth 開発の基本プロセス
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み] APKファイルからソースコードを取得する方法はありますか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
armeabi-v7a armeabi arm64-v8a パラメータの意味説明
-
Androidで発生した問題、解決策とヒント
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
Android ProgressBarの色を変更する
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
android studioが新しいプロジェクトを作成しますが、プロジェクトの同期に成功するまでデザインエディタが使用できません。
-
アンドロイドにおけるトークンの利用