在方向更改时获取ImageView的宽度和高度

时间:2012-03-23 20:53:01

标签: android layout imageview

我正在尝试将位图放入ImageView中,以便在旋转设备时改变大小。 它会改变大小,因为我分别为纵向和横向模式加载不同的布局。 我根据ImageView放置在布局上时可用的屏幕空间大小来计算最终的位图大小。

目前我正试图通过自己处理配置更改(轮换)来解决这个问题。

我尝试过使用onConfigurationChanged和ViewTreeObserver取得了一些成功。只要我不使用setContentView,我就会获得ImageView的宽度和高度,并相应地进行缩放。但是,我需要能够加载另一个布局并基于ImageView的可用空间,为位图计算新的缩放。

我如何做到这一点?加载新布局后,ImageView的宽度和高度变为零。

我的目标是缩放位图大小以适应旋转时的imageview。

1 个答案:

答案 0 :(得分:0)

您可以覆盖多种方法,包括onSizeChanged和onLayout,但所有这些方法都有怪癖。我发现查找视图大小的最可靠方法是使用视图树观察器。从观察者的视图中获得的宽度和高度可以更改,并且通常在更改GlobalLayout时的第一次或前几次。

尝试在视图树观察器中记录onGlobalLayout中所需视图的宽度和高度,看看会发生什么。还要确保在调用setContentView之后再次调用findViewById来查找任何ImageView对象取代旧对象。如果您仍然在旋转之前查看图像视图,则宽度和高度将永远不会准确,因为该视图不再处于任何可见布局中。