0

我有一个动态布局,其中一个图像被加载到一个 HBox 中:

<mx:HBox ...>
    <mx:Image height="100%" .../>
</mx:HBox>

仅在图像上设置了图像的高度,以便它可以占用所有可用的垂直空间,而其宽度未定义,我希望宽度随其高度相应缩放。

事实证明,图像的高度等于它的 contentHeight,即高度适当地缩放;但是,图像的宽度仍然与measuredWidth(图像的原始宽度)相同,并且没有相应地缩放。

例如,如果图像的原始尺寸为 800x600,如果 HBox 的高度为 300,则图像高度将缩小到 300,但其宽度不会缩小到 400,而是保持在 800。

我尝试添加一个事件侦听器来显式设置图像宽度:

<mx:Image id="img" height="100%" updateComplete="img.width=img.contentWidth;" .../>

它仅在第一次加载图像时起作用,之后,如果我使用 Image.load() 动态加载不同的图像,它将停止工作 - 图像宽度设置为 0。

任何帮助/建议将不胜感激。

4

4 回答 4

3

在 Adob​​e 论坛上得到了答案。我的解决方案就差不多了,只需要使用 callLater(),比如:

private function scaleImage():void {
    img.width = img.contentWidth;
}

updateComplete="callLater(scaleImage)"
于 2009-11-14T05:15:01.160 回答
0

尝试使用<mx:Box />与否。<mx:Canvas /><mx:HBox />

据我了解, HBox 具有灵活的宽度。它稍后将宽度计算为其子项的总和。VBox 中的高度也一样。

于 2009-11-13T23:59:26.770 回答
0

尝试添加:maintainAspectRatio="true"


更新 1:在回复您的评论时,这就是您要查找的内容,如您在此处的示例中所见。保持纵横比意味着保持宽度和高度之间的关系。

于 2009-11-14T00:01:39.480 回答
0

观察到的行为是记录在案的错误、错误、功能。
图像类文档告诉图像高度是缩放图像的高度,而图像宽度是未缩放图像的宽度。并且他的一个应该用于布局。
我不知道为什么高度和宽度的处理方式不同以及为什么缩放的图像应该在其容器中浪费空间,但这就是它的编码方式。

线

updateComplete="callLater(function():void{xxx.width=xxx.contentWidth;})"

(不需要单独的脚本函数)可以解决这个问题。但这根本不应该是必要的。

于 2013-03-07T15:17:13.790 回答