Получить положение ImageView относительно экрана программно
Я хочу программно выбрать позицию ImageView
. По позиции, я имею в виду расстояние в пикселе от вершины экрана до этого ImageView.
Я пробовал любое другое решение, отправленное в stackoverflow, но оно не работает для меня. Мой минимальный уровень API - 8.
Это коды, которые я пробовал -
ImageView image = (ImageView) findViewById(R.id.imageView1);
1) image.getTop();
2) private int getRelativeTop(View myView) {
if (myView.getParent() == myView.getRootView())
return myView.getTop();
else
return myView.getTop() + getRelativeTop((View) myView.getParent());
}
3) image.getLocationOnScreen(int[] locaiton);
Ответы
Ответ 1
Вам нужно дождаться обратного вызова, когда макет был помещен с детскими представлениями. Это слушатель, который нужно добавить в корневой режим, чтобы рассчитать координаты для вашего изображения. В противном случае он вернет 0.
getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
getViewTreeObserver().removeGlobalOnLayoutListener(this);
int[] locations = new int[2];
image.getLocationOnScreen(locations);
int x = locations[0];
int y = locations[1];
}
});
Ответ 2
Используйте View.getLocationOnScreen()
или getLocationInWindow()
НО ТОЛЬКО после просмотра макета. getTop()
, getLeft()
, getBottom()
и getRight()
возвращают позицию относительно ее родителя.