Flash

昨日買ってきたWEB+DBの連載にActionScript3.0の記事があって、そういえばうっかりFlexBuilderを大金出して買ってしまったのに放置状態だったので、Eclipse立ち上げて少し遊んでみました。
結果・・・楽しすぎて5時間ぶっ通しでやってしまいました。ちゃんとオブジェクト指向になってるし、XMLで画面作ってイベントリスナーでアクション登録とか、まるでjavaです。すてき。
Flex2,ActionScript3.0が優れている9の理由とAjaxとの差
フロント系のHOTな技術はAjaxかFlashだけど、↑の理由でAjaxは好きになれません。特にブラウザ依存が頭が痛い。同じように仕様がコロコロ変わるPHPも嫌いです。こいつらの保守にかかる手間は異常。将来Flashがメインになるかと言われるとどうなるかわからないけど・・・

Flickrビューワー作り

昨日今日で、いきなり本格的なのは無理なので、blogの横に貼り付けるウィジェットでも作ってみようと考えました。画像のサムネイルを表示する、よくあるやつです。
現時点で出来たのはここまで。
http://www.sumomo.jp/study/flex1/Flickr.html
色とか大きさとか微妙だけど、何となくウィジェットぽいものが出来ました。後はクリックして画像URLに飛ばせれば良いかな。
仕様はFlickrの最新画像が出力されるRSSを読んで、画像を読み込んで表示してるだけです。APIとか使ってません。初めてなのとFlexBuilderのGUIでデザインしたので、何か汚いけどソースも置いときます。
http://www.sumomo.jp/study/flex1/Flickr.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="loadFlickrFeed()"	
	horizontalAlign="Center" verticalAlign="middle" width="320" height="500">
	<mx:Script source="FlickrViewer.as"/>
	<mx:Panel layout="absolute" backgroundColor="#998899" left="10" right="20" 
		   bottom="10" top="10" color="#DDEFF3" cornerRadius="11" borderStyle="none">
	  	<mx:TileList  columnCount="4" left="15" right="15" top="10" bottom="30" dataProvider="{photos}"
	  		paddingBottom="5"
	  		 alternatingItemColors="[#F1E7E7, #E4C8C8]" cornerRadius="0">
		  	<mx:itemRenderer>
				<mx:Component>
					<mx:VBox horizontalAlign="center" height ="70" width="70">
						<mx:Image id="photo" horizontalAlign="center" height ="50" width="50" source="{data.photo}"/>
					</mx:VBox>
				</mx:Component>
			</mx:itemRenderer>
	  	</mx:TileList>
	  	<mx:Button click="loadFlickrFeed()" y="418" label="再読込" x="10" fillAlphas="[1.0, 0.11, 1.0, 0.11]" 
	  		fillColors="[#0E9684, #0E9684, #0E9684, #0E9684]" borderColor="#000000" color="#000000" />
	</mx:Panel>
</mx:Application>

http://www.sumomo.jp/study/flex1/FlickrViewer.as

import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import mx.collections.ArrayCollection;

private const FEED_URL:String = 'http://api.flickr.com/services/feeds/photos_public.gne?format=rss_200';
private var urlLoader:URLLoader;
[Bindable] public var photos:ArrayCollection;


private function loadFlickrFeed():void{		
	photos = new ArrayCollection();
	urlLoader = new URLLoader();
	urlLoader.load(new URLRequest(FEED_URL));
	urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
	urlLoader.addEventListener(Event.COMPLETE, loaded);
}

private function loaded(e:Event):void{
	var feed:XML = XML(urlLoader.data);
	namespace mediaNS = 'http://search.yahoo.com/mrss/';
	use namespace mediaNS;
	for each(var item:XML in feed.channel.item){
		var thumbnailUrl:String = item.thumbnail.@url;
		var contentUrl:String = item.content.@url;
		var obj:Object = {photo:thumbnailUrl,url:contentUrl};
		photos.addItem(obj);
	}
}

後書き

  • TileListの使い方に苦労しました。
  • エフェクトとかそれなりに揃ってるけれど、タイムラインで作る物にはかないません。
  • というわけで、Flash CS3が欲しい