2009-11-13 60 views
0

我有一個動態的佈局,其中圖像加載到與HBox:Flex:縮放圖像以使其寬度與contentWidth匹配?

<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.

任何幫助/建議將不勝感激。

回答

3

在Adobe論壇上有答案。我的解決辦法幾乎沒有,只需要使用使用callLater(),如:

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

updateComplete="callLater(scaleImage)" 
+0

真的很有用,幾乎每一次都讓我感覺到!謝謝 – robmcm 2010-04-20 12:34:54

0

嘗試使用<mx:Box /><mx:Canvas />而不是<mx:HBox />

據我所知,HBox具有靈活的寬度。它計算後面的寬度作爲它的孩子的總和。與VBox中的高度相同。

+0

也沒有工作。我沒有嘗試,因爲我需要HBox佈局 - 我必須在其右側圖像旁邊顯示一些文本。 – 2009-11-14 01:43:16

0

嘗試添加:maintainAspectRatio="true"


更新1:在回答您的意見,這是所尋找的,因爲你可以在例如here看到。保持寬高比意味着保持寬度爲&高度之間的關係。

+0

此標誌控制圖像失真,與我的情況無關:圖像本身仍以正確的比例顯示,圖像控件的寬度超出比例。謝謝。 – 2009-11-14 01:41:50

+0

@Tong看我的更新 – eglasius 2009-11-14 15:42:53

+0

我知道它很混亂,但我們在這裏討論兩組高度/寬度:一個是圖像內容的高度/寬度,另一個是圖像控件的高度/寬度。 maintainAspectRatio默認爲true,所以我的圖像內容在高度和寬度上均可正確縮放。但是,圖像控件的寬度與高度不成比例,導致控件在HBox中佔據額外的「空白」水平空間。 謝謝你的幫助和希望,我已經足夠清楚地解釋了。 – 2009-11-14 18:42:14

0

所觀察到的行爲是一個文檔的錯誤,犯錯,功能。
圖像類文檔告訴圖像高度是縮放圖像的高度,而圖像寬度是未縮放圖像的寬度。而他的一個應該用於佈局。
我不知道爲什麼高度和寬度的處理方式不同,爲什麼縮放圖像應該浪費其容器中的空間,但這就是它的編碼方式。

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

(無需單獨的腳本功能)治癒這一點。但這根本不應該是必要的。