亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取視圖的絕對坐標

如何獲取視圖的絕對坐標

郎朗坤 2019-07-29 11:16:33
如何獲取視圖的絕對坐標我正在嘗試獲取視圖左上角的絕對屏幕像素坐標。但是,我可以找到的所有方法,例如getLeft()并且getRight()不起作用,因為它們似乎都相對于視圖的父級,因此給了我0。這樣做的正確方法是什么?如果它有幫助,這是為了“讓圖片重新整理”游戲。我希望用戶能夠繪制一個框來選擇多個部分。我的假設是,做到這一點的最簡單方法是getRawX(),并getRawY()從MotionEvent再兌布局保持件的左上角比較這些值。知道了件的大小,我就可以確定已經選擇了多少件。我知道我可以使用getX()和getY()上MotionEvent,而是作為一個返回相對位置,使得確定哪個被選擇件更困難。(我知道,這并非不可能,但似乎不必要地復雜化)。編輯:這是我用來嘗試獲取保持容器大小的代碼,根據其中一個問題。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]);所有初始化完成后添加此代碼。圖像被分成一個包含在a中的ImageViews(cells []數組)數組TableLayout。單元格[0]是左上角ImageView,我選擇了單元格[4],因為它位于中間的某個位置,絕對不應該有(0,0)的坐標。上面顯示的代碼仍然給我在日志中的所有0,我真的不明白,因為各種拼圖正確顯示。(我為tableLayoutCorners和默認可見性嘗試了public int,兩者都給出了相同的結果。)我不知道這是否重要,但ImageViews最初沒有給出尺寸。ImageView當我給它一個要顯示的圖像時,視圖自動初始化時確定s 的大小。這可能會導致它們的值為0,即使這些日志代碼是在它們被賦予圖像并自動調整大小之后嗎?為了解決這個問題,我添加了tableLayout.requestLayout()如上所示的代碼,但這沒有幫助。
查看完整描述

3 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

查看完整回答
反對 回復 2019-07-29
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

接受的答案實際上沒有說明如何獲得位置,所以這里有更多細節。傳入int長度為2 的數組,并將值替換為視圖的(x,y)坐標(頂部,左上角)。

int[] location = new int[2];myView.getLocationOnScreen(location);int x = location[0];int y = location[1];

筆記

  • 更換getLocationOnScreengetLocationInWindow應該給在大多數情況下,相同的結果(見這個答案)。但是,如果您在像Dialog或自定義鍵盤這樣的較小窗口中,那么您需要選擇哪一個更適合您的需求。

  • (0,0)如果您調用此方法,則會得到,onCreate因為視圖尚未布局。您可以使用a ViewTreeObserver來監聽布局完成后您可以獲得測量的坐標。(見這個答案。)


查看完整回答
反對 回復 2019-07-29
  • 3 回答
  • 0 關注
  • 623 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號