Как получить абсолютные координаты вида

Я пытаюсь получить абсолютные координаты пикселей экрана в верхнем левом углу представления. Тем не менее, все методы, которые я могу найти, такие как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]);

Этот код был добавлен после завершения инициализации. Изображение было разделено на массив ImageViews (массив cell []), содержащийся вTableLayout, Ячейки [0] вверху слеваImageViewи я выбрал ячейки [4], так как они где-то посередине и, безусловно, не должны иметь координаты (0,0).

Код, показанный выше, все еще дает мне все 0 в журналах, которые я действительно не понимаю, потому что различные части головоломки отображаются правильно. (Я попробовал public int для tableLayoutCorners и видимости по умолчанию, оба дали одинаковый результат.)

Я не знаю, если это важно, ноImageViews изначально не имеют размера. РазмерImageViews определяется во время инициализации автоматически при просмотре, когда я даю ему изображение для отображения. Может ли это способствовать тому, что их значения будут равны 0, даже если этот код регистрации будет после того, как они получили изображение и автоматически изменили размеры сами? Чтобы потенциально противостоять этому, я добавил кодtableLayout.requestLayout() как показано выше, но это не помогло.

Ответы на вопрос(8)

Ваш ответ на вопрос