0

私はずっとこの問題に苦しんでいます、そして私は解決策が非常に簡単であると推測しています。

Flexアプリケーションには、実行時に画像を読み込んで表示しようとするUIComponentを拡張するコンポーネントがあります。さまざまなアプローチ(beginBitmapFill()を使用、さまざまなコンテナーを使用)を試しましたが、希望どおりに機能させることができません。この問題は、画像の幅と高さのプロパティに関連しているようですが、正しく更新されていません。アイデアは次のとおりです。

var sprite:Sprite = new Sprite();
addChild(sprite);

var im:Image = new Image();
im.addEventListener(Event.COMPLETE, function(e:Event):void {
    sprite.addChild(im);
}
im.load('path/image.png');

画像を読み込んだときに、画像の幅と高さが正しくないようです。width == 0を取得します(何も表示されません)が、プロパティ$widthは正しいようです。ロードされた画像の幅と高さが更新されていることを確認するにはどうすればよいですか?

4

2 に答える 2

3

これはタイミングの問題であり、画像クラスはユーザーの期待を裏切るため、画像クラスのバグです。

つまり、画像クラスは最初にダウンロードを実行し(そして、最終的にCOMPLETEをディスパッチし)、次に測定(およびスケーリング)を実行してから、値を正しく更新します(ほとんどの場合、別のUPDATEイベントが発生します)。

したがって、この問題に最初に遭遇したとき、私の解決策は、最初にCOMPLETEイベントをリッスンし、次にUPDATEにリスナーを追加することでした(これは通常、作成またはダウンロード中に少なくとも1回ディスパッチされるため、更新をリッスンすることはできません)、しかし、これはかなり悪いハックです。

この質問はstackoverflowで以前に回答されたと確信しており、おそらくより良い解決策がありました。

PS:念のため、widthとcontentWidthの違いにも注意してください:)

于 2009-11-16T17:48:22.500 に答える
1

Event.COMPLETEの代わりにEvent.INITで試してください

于 2009-11-16T15:32:58.530 に答える