뷰의 왼쪽 상단 모서리의 절대 화면 픽셀 좌표를 얻으려고합니다. 그러나 모든 방법은 내가 같은 찾을 수 있습니다 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]);
이 코드는 모든 초기화가 완료된 후에 추가되었습니다. 이미지가에 포함 된 ImageView 배열 (cells [] 배열)로 분할되었습니다 TableLayout
. Cells [0]은 왼쪽 상단 ImageView
이며 중간에 어딘가에 있으므로 [4] 셀을 선택했으며 좌표는 (0,0)이 아니어야합니다.
위에 표시된 코드는 여전히 로그에 0을 모두 제공합니다. 여러 퍼즐 조각이 올바르게 표시되기 때문에 실제로 이해할 수 없습니다. (TableLayoutCorners 및 기본 가시성에 대해 public int를 시도했지만 동일한 결과를 얻었습니다.)
이것이 중요한지 모르겠지만 ImageView
원래 크기는 주어지지 않았습니다. ImageView
s 의 크기는 표시 할 이미지를 제공 할 때 View에 의해 자동으로 초기화하는 동안 결정됩니다. 로깅 코드에 이미지가 제공된 후 자동으로 크기가 조정 된 후에도 값이 0이 될 수 있습니까? 잠재적으로 그것을 반박하기 위해 tableLayout.requestLayout()
위 의 코드 를 추가 했지만 도움이되지 않았습니다.