У меня возникли проблемы с получением правильных координат (XY) для моего ImageView.
Мой макет выглядит следующим образом:
<Relativelayout>
<Relativelayout>
<LinearLayout>
//I want to get the X and Y of this imageview
<ImageView/>
</LinearLayout>
</Relativelayout>
</Relativelayout>
Посмотрев на вопрос похожий, я реализовал следующее:
int[] img_coordinates = new int[2];
mImageView.getLocationOnScreen(img_coordinates);
double x = (double)img_coordinates[0];
double y = (double)img_coordinates[1];
На всякий случай я добавил это в ViewTreeObserver, вот так:
mImageView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int[] img_coordinates = new int[2];
mImageView.getLocationOnScreen(img_coordinates);
float x = (double)img_coordinates[0];
float y = (double)img_coordinates[1];
}
});
У меня проблема в том, что возвращаемые XY неверны.
Мой вопрос:
Есть ли причина, по которой я получаю неправильные координаты и как я могу получить правильные?
Обновлено:
Я решил предоставить весь свой XML-файл макета с помощью pastebin, потому что он очень большой и потребуется некоторое время, чтобы отформатировать его в SO. Здесь - это ссылка.
Кроме того, вот изображение того, чего я хотел бы достичь:
@pskink да, потому что это вообще не работает.
Я сбит с толку. Вам нужны координаты самого ImageView или координаты события касания для масштабированного Bitmap?
@MikeM. Я хочу координаты самого ImageView.
@pskink Вы уверены, что связали правильный пост?
HB., Как координаты у тебя неверные? То есть какие значения вы получаете и каковы ожидаемые значения?
@pskink Да, я думаю, им просто нужны ImageView (x, y).
@MikeM. У меня есть 2 ImageView, на вопрос, который я только что упомянул, для простоты. Когда я нажимаю кнопку, я хочу переместить один ImageView поверх другого, получив XY целевого ImageView. В настоящее время изображение перемещается в неправильную позицию, а не поверх другого. Надеюсь, это имеет смысл.
Что ж, вы не можете сделать это внутри LinearLayout. Он не будет перекрывать своих дочерних элементов, если это то, что вы подразумеваете под «сверху».
@MikeM. Что вы предлагаете мне делать?
@MikeM. Я забыл упомянуть, что второе изображение, которое я хочу переместить, находится не внутри LinearLayout.
Ой, ну это другое. Какой бы общий предок ViewGroup у них ни был, он должен быть таким, который допускает перекрытие дочерних элементов; например, FrameLayout или RelativeLayout. Затем вам нужно будет основывать их координаты на их положении в пределах этого предка.
Это все обобщения, потому что не совсем понятно, что вы собираетесь делать. Вы, вероятно, захотите показать нам фактическую компоновку с обоими ImageView на своих местах.
@MikeM. Пожалуйста, покажитесь моим редактором, я предоставил изображение того, чего я хотел бы достичь / сделать, и ссылку на мой макет .xml.
Честно говоря, есть более простые способы сделать это. Лично я бы написал кастомный View для такой игровой доски. Однако, если вы хотите придерживаться доступных View и ViewGroup, вы можете значительно упростить макет. Например, основная плата может содержать 64 ImageView в одном GridLayout. Если вы разместите это внутри корневого RelativeLayout, а затем добавите свою часть View к этому корню, это будет просто вопрос установки части на смещения GridLayout, плюс смещения цели; то есть что-то вроде: piece.setX(gridLayout.getX() + target.getX());, и то же самое для Y
@MikeM. В этом есть смысл, я также думаю, что это уменьшит объем моего кода. Вместо этого я попробую. Спасибо, что нашли время ответить.




@pskink какой ответ вы имеете в виду?