Подтвердить что ты не робот

Получить положение 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);
4b9b3361

Ответ 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() возвращают позицию относительно ее родителя.