Как получить абсолютные координаты вида
Я пытаюсь получить абсолютные координаты пикселей экрана в верхнем левом углу представления. Тем не менее, все методы, которые я могу найти, такие как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 и видимости по умолчанию, оба дали одинаковый результат.)
Я не знаю, если это важно, ноImageView
s изначально не имеют размера. РазмерImageView
s определяется во время инициализации автоматически при просмотре, когда я даю ему изображение для отображения. Может ли это способствовать тому, что их значения будут равны 0, даже если этот код регистрации будет после того, как они получили изображение и автоматически изменили размеры сами? Чтобы потенциально противостоять этому, я добавил кодtableLayout.requestLayout()
как показано выше, но это не помогло.