Получить ширину и высоту ImageView при изменении ориентации - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь разместить растровое изображение в ImageView, которое меняет размер при повороте устройства. Он меняет размер, потому что я загружаю разные макеты для портретного и ландшафтного режима соответственно. Я рассчитываю окончательный размер растрового изображения на основе того, сколько свободного места на экране имеет ImageView, когда он был размещен на макете.

В данный момент я пытаюсь решить эту проблему, заботясь об изменении конфигурации (ротации).

Я попытался с помощью onConfigurationChanged и ViewTreeObserver с некоторым успехом. Пока я не использую setContentView, я получаю ширину и высоту ImageView, и масштабирование выполняется соответственно. Однако мне нужно иметь возможность загрузить другой макет и, исходя из доступного пространства ImageView, рассчитать новое масштабирование для растрового изображения.

Как мне это сделать? Как только я загружаю новый макет, ширина и высота ImageView становятся равными нулю.

Моя цель - увеличить размер растрового изображения, чтобы он соответствовал просмотру изображения при вращении.

1 Ответ

0 голосов
/ 24 марта 2012

Существует множество методов, которые вы можете переопределить, включая onSizeChanged и onLayout, но все они имеют свои причуды. Самый надежный способ определить размер представлений, который я нашел, - это использовать средство просмотра дерева представлений. Ширина и высота, которые вы получаете от вида в обозревателе, могут изменяться, и часто равны 0 при первом или первом изменении значения onGlobalLayout.

Попробуйте просто зарегистрировать ширину и высоту нужного вам вида в onGlobalLayout в обозревателе дерева представлений и посмотрите, что произойдет. Также убедитесь, что после вызова setContentView вы снова вызываете findViewById, чтобы найти любой объект ImageView, который заменяет старый. Если вы все еще смотрите на изображение до вращения, ширина и высота никогда не будут точными, так как этот вид больше не отображается ни в одном видимом макете.

...