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