Hatena::Groupactionscript

ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記

2009年03月15日 日曜日

はてなフォトライフの画像を表示してみる(3)

| 19:58 | はてなフォトライフの画像を表示してみる(3) - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - はてなフォトライフの画像を表示してみる(3) - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 はてなフォトライフの画像を表示してみる(3) - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 のブックマークコメント

課題

  • stageオブジェクト?の呼ぶタイミングがわからない
  • フォーカス
    • stage.stageFocusRectについてfalseにしないと、黄色い四角の枠で囲まれます
    • フォーカスを合わせた時って、クリックと何が違うの?と思ったけれど、タブキーなどでもフォーカスは合わせられるんだよね(たしか)
  • stage.scaleMode
    • stageの幅が変動したときにイベントが発生するらしい
    • この時の話に関わるらしい
  • setChildIndex
  • 傾き

実際の結果

f:id:d4-1977:20090315215852p:image

元ソース(FhatenaViewer.as)

package
{
	import flash.display.DisplayObject;
	import flash.display.StageScaleMode;
	import flash.events.*;
	import flash.net.*;
	import mx.controls.Alert;
	import mx.core.UIComponent;
	import photo.Photo;

	public class FhatenaViewer extends UIComponent
	{
		public function FhatenaViewer()
		{
			createPhoto('http://f.hatena.ne.jp/macanai/rss');
		}

		public function onLoading(event:ProgressEvent):void
		{
		}

		public function createPhoto(feed:String):void
		{
			var loader:URLLoader = new URLLoader();
			loader.load(new URLRequest(feed));
			loader.addEventListener(Event.COMPLETE, createPhotoByXML);
			loader.addEventListener(ProgressEvent.PROGRESS, onLoading);
		}

		public function createPhotoByXML(event:Event):void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.stageFocusRect = false;

			var rdf:Namespace    = new Namespace("rdf",    "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
			var dc:Namespace     = new Namespace("dc",     "http://purl.org/dc/elements/1.1/");
			var hatena:Namespace = new Namespace("hatena", "http://www.hatena.ne.jp/info/xmlns#");
			var feed:XML = new XML(event.target.data);
			for each(var item:Object in feed.*::item){
				createPhotoItem(item.hatena::imageurl,item.*::title);
			}
		}

		public function createPhotoItem(url:String,title:String):void
		{
				var p:Photo = new Photo();
				p.name = title;
				p.x = (stage.width - p.width) * Math.random();
				p.y = (stage.height - p.height) * Math.random();
				addChild(p);
				p.loadImage(url);
				p.addEventListener(FocusEvent.FOCUS_IN,pFocusInHandler);
		}

		private function pFocusInHandler(event:FocusEvent):void
		{
			setChildIndex(event.currentTarget as DisplayObject, numChildren - 1);
		}

	}
}

元ソース(photo/Photo.as)

package photo
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	
	public class Photo extends Sprite
	{		
		public function Photo()
		{
		}
		
		public function loadImage(url:String):void
		{
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadhandler);
			loader.load(new URLRequest(url));
		}

		public function loadhandler(event:Event):void
		{
			addChild(event.target.loader);
			rotation = Math.random() * 30 - 10;
			addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
		}

		private function mouseDownHandler(event:MouseEvent):void
		{
			stage.focus = this;
		}
	}
}