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