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