Flex 4.5 で spark 版の Image コンポーネントが追加されてキャッシュ機構とかスムーズリサイズ、レターボックス化なんかの機能が使えるようになった。
http://opensource.adobe.com/wiki/display/flexsdk/Spark+Image
で、ロード中にプログレスバーを表示できるようにもなったんだけど、これがうまく動かない。
SkinParts で指定されている id を割り当てられているにも関わらず、スキン側のプログレスバーが無視されている感じ。
で spark 内のソースを追ってみたら、
override protected function getCurrentSkinState():String
{
var enableLoadingState:Boolean = getStyle("enableLoadingState");
if (_invalid)
return "invalid";
else if (!enabled)
return "disabled";
else if (_loading && enableLoadingState) // ← ここ
return "loading";
else if (imageDisplay && imageDisplay.source && _ready)
return "ready";
else
return "uninitialized";
}
なんて箇所を発見。つまり、enableLoadingState っていうスタイルがないとローディング中の State が認識されない。(プロパティじゃないところが軽いトラップ。)
というわけで、
s|Image {
enableLoadingState: true;
}
とか
って指定してやれば無事にプログレスバーが表示されるよ、というお話。
(上で挙げたアドビのページだと ってあるけどこれはたぶんウソ、もしくはベータ時代のお話。そんなものはなかった。)