Flex Builder 3 で作成する flash の中で、サーバ上の画像ファイルを読み込んで表示をしたいのだが、「Action Script 3.0 逆引きクイックリファレンス」などの書籍に載っているやり方だと上手くいかない。
例えば、こんな感じ。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
initialize="initProc()"
layout="absolute" width="420" height="250"
borderColor="#D7DBDD" color="#000000"
backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#CAC8C8, #CAC8C8]">
<mx:Script>
<![CDATA[
import flash.net.URLRequest;
import flash.display.*;
import flash.events.*;
public var gLoader:Loader = new Loader();
private function initProc():void {
var url:URLRequest = new URLRequest("http://hogehoge.jp/images/qr_code.gif");
gLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
gLoader.load(url);
}
private function loadComplete(event:Event):void {
var loaderInfo:LoaderInfo = event.target as LoaderInfo;
var bitmap:Bitmap = loaderInfo.content as Bitmap;
addChild(bitmap);
}
]]>
</mx:Script>
</mx:Application>
しかし、これで Flex Builder 3 で swf ファイルを作成しても、エラーも出ないが画像も表示されない。
ちゃんと画像は読み込まれ、Event.COMPLETE イベントも発生しているのだが、画像は表示されないのである。なんでぇ?
Web 上でググっても、だいたい、上のようなソースで上手くいっているようである。何で上手くいかないのかは謎。
FlexBuilder で吐く flash ファイルではこの書き方は駄目・・・とかいうことなんかなあ?識者の人、是非ご教示ください。
まあ、一応、UIComponent クラスを使ったやり方で表示じたいは出来ているので、問題はないのだが、何故に定番のやり方が上手くいかないのかは気になる。
ちなみに、上手くいっているソースは以下のとおり。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
initialize="initProc()"
layout="absolute" width="420" height="250"
borderColor="#D7DBDD" color="#000000"
backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#CAC8C8, #CAC8C8]">
<mx:Script>
<![CDATA[
import flash.net.URLRequest;
import flash.display.*;
import flash.events.*;
import mx.core.UIComponent;
public var gLoader:Loader = new Loader();
private function initProc():void {
var url:URLRequest = new URLRequest("http://hogehoge.jp/images/qr_code.gif");
gLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
gLoader.load(url);
}
private function loadComplete(event:Event):void {
var uic:UIComponent = new UIComponent;
uic.addChild(gLoader);
this.addChild(uic);
}
]]>
</mx:Script>
</mx:Application>
いやぁ、ついつい同じ Flex Builder 3 で作る AIR アプリと同じ感覚で、「サーバ上の画像の表示? HTML コンポーネントを使えばすぐですよ」なんて簡単に見積もってしまったが、実際には flash 用には HTML コンポーネントなんて用意されてないし、よって UIComponent クラスなんかも使うの初めてだし・・・厳しいぃ~(^^;