0

画像が HBox に読み込まれる動的レイアウトがあります。

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

画像には画像の高さのみが設定されているため、使用可能なすべての垂直方向のスペースを使用できますが、幅は未定義のままで、幅は高さに応じてスケーリングされると予想されます。

画像の高さが contentHeight と等しいことがわかります。つまり、高さは適切にスケーリングされます。ただし、画像の幅は測定幅 (画像の元の幅) と同じままであり、それに応じてスケーリングされません。

たとえば、画像の元のサイズが 800x600 で、HBox の高さが 300 の場合、画像の高さは 300 に縮小されますが、幅は 400 に縮小されず、代わりに 800 のままになります。

画像の幅を明示的に設定するイベント リスナーを追加しようとしました。

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

画像が初めてロードされたときにのみ機能します。その後、 Image.load() を使用してさまざまな画像を動的にロードすると、機能が停止します-画像の幅が0に設定されます。

ヘルプ/アドバイスをいただければ幸いです。

4

4 に答える 4

3

Adobeフォーラムで回答を得ました。私の解決策はほとんどありました。次のように callLater() を使用するだけです。

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

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

観察された動作は、文書化されたバグ、エラー、機能です。
画像クラスのドキュメントには、画像の高さはスケーリングされた画像の高さであり、画像の幅はスケーリングされていない画像の幅であることが示されています。そして、彼のものをレイアウトに使用する必要があります。
高さと幅の扱いが異なる理由と、スケーリングされた画像がコンテナー内のスペースを浪費する理由はわかりませんが、それがコード化されている方法です。

この線

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

(別のスクリプト関数は必要ありません)これを修正します。しかし、これは実際にはまったく必要ないはずです。

于 2013-03-07T15:17:13.790 に答える
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 に答える