SQLの窓 イラストAC フリー素材

2012年03月21日

2年半ぶりに Air Flex のコードを整備しましたが、相変わらず欲しい情報が見つからないのが Adobe のようです

Flex2 からやっている自分ですら相当苦労しました。ま、でも一日で済んだ
のは奇跡的かもしれませんが、Flex4 の日本語リファレンスのダウンロード
リンクすら世の中から消えている始末です。

酷すぎ。

▼ PC にあるのと中身を比較していませんが・・・・
http://help.adobe.com/ja_JP/Flex/4.0/Flex_4_docs.zip


<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
	xmlns:mx="library://ns.adobe.com/flex/mx"
	xmlns:s="library://ns.adobe.com/flex/spark"
	initialize="initData();"
	nativeDragEnter="Check_DragEnter(event)"
	nativeDragDrop="Check_DropFile(event)"

	usePreloader="true"
	showStatusBar="false"

	titleIcon="{imgSmile}"
	title="エクスプローラから flv をドラッグ・ドロップできます"

	skinClass="spark.skins.spark.SparkChromeWindowedApplicationSkin"
>

<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";

s|Panel {
	backgroundColor:black;
}

</fx:Style>

<fx:Script>
<![CDATA[

	import spark.components.*;
	import spark.events.*;
	import org.osmf.events.*;
	import org.osmf.media.*;
	import flash.filesystem.*;
	import flash.events.Event;
	import mx.controls.Alert;
	import mx.logging.targets.*;
	import mx.logging.*;

//	import spark.skins.spark.*;

	[Bindable]
	[Embed("smile.png")]
	private static var imgSmile:Class;
	private var nSize:int = 1;
	private var rootObject:WindowedApplication;
	private	var nativeMenu:ContextMenu;

	private var logger:ILogger = Log.getLogger("MyLogger");

	// *********************************************************
	// アプリケーションの初期化
	// *********************************************************
	public function initData():void {

		var traceTarget:TraceTarget = new TraceTarget();
		traceTarget.level = LogEventLevel.ALL;
		traceTarget.filters = ["*"];
		traceTarget.includeDate = false;
		traceTarget.includeTime = false;
		traceTarget.includeLevel = false;
		traceTarget.includeCategory = false;
		Log.addTarget(traceTarget);

//		this.setStyle( "skinClass", SparkChromeWindowedApplicationSkin );

		// メッセージ
		logger.info( "initData() が実行されました" );

		// 再生イベントの発生間隔
//		myVid.playheadUpdateInterval = 1;

		// プログレスバーの初期化
		progressBar.setProgress(0, 100);

		// Mainw.xml の値を変更
//		this.height = 600;

		// 初期ボリューム
		myVid.volume = 0.7;

		// *************************************************
		// コンテキストメニュー定義
		// *************************************************
		rootObject = WindowedApplication(mx.core.FlexGlobals.topLevelApplication)
		nativeMenu = new ContextMenu();
		nativeMenu.hideBuiltInItems();

		addContextMenu(
			"x 1",
			function():void {
				changeSize(1);
			}
		);
		addContextMenu(
			"x 2",
			function():void {
				changeSize(2);
			}
		);
		addContextMenu(
			"x 0.5",
			function():void {
				changeSize(3);
			}
		);
		addContextMenu(
			"ベースを最大化",
			function():void {
				myVid.stage.displayState = 'fullScreen';
			}
		);
		addContextMenu(
			"ベースを標準",
			function():void {
				myVid.stage.displayState = 'normal';
			}
		);
		rootObject.contextMenu = nativeMenu;

	}

	// *********************************************************
	// コンテキストメニュー追加
	// *********************************************************
	public function addContextMenu(
		label:String,
		listener:Function
	):void {

		var menuItem:ContextMenuItem;
		menuItem = new ContextMenuItem(label);
		menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,listener);
		nativeMenu.customItems.push(menuItem);

	}

	// *********************************************************
	// 外部からドラッグ開始
	// *********************************************************
	private function Check_DragEnter(e:NativeDragEvent):void {

		var clip:Clipboard = e.clipboard;
		if ( clip.hasFormat( ClipboardFormats.FILE_LIST_FORMAT ) ) {
			NativeDragManager.acceptDragDrop(this);
		}
	}

	// *********************************************************
	// 外部からドロップ
	// *********************************************************
	private function Check_DropFile(e:NativeDragEvent):void {

		var clip:Clipboard = e.clipboard;
		var file_list:Array;
		file_list = clip.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

		var str:String = file_list[0].nativePath;
		var part:Array = str.split(".");
		var len:int = part.length;
		var ext:String = (part[len-1]).toUpperCase();

		if ( ext == "MP4" || ext == "FLV" ) {
			myVid.source = file_list[0].nativePath;
//			myVid.load();
			progressBar.setProgress(0, 100);
		}
		else {
			Alert.show( "flv か mp4 を使用して下さい" );
		}
	}

	// *********************************************************
	// ストップ( リセット )処理
	// *********************************************************
	public function play_Reset():void {

		// STOP ボタンを使用した場合は巻き戻すが、
		// 最後まで表示した場合は巻き戻さない
		myVid.autoRewind = true;
		myVid.stop();
		myVid.autoRewind = false;
	}


	// *********************************************************
	// シーク
	// *********************************************************
	private function setTime( e:MouseEvent ):void {

		myVid.seek( ( e.localX * myVid.duration )/ progressBar.width );
		logger.info("seek");


	}

	// *********************************************************
	// サイズ変更
	// *********************************************************
	private function changeSize( nSize:int ):void {

		switch( nSize ) {
			case 1:
				myVid.width = myVid.videoObject.videoWidth;
				myVid.height = myVid.videoObject.videoHeight;
				break;
			case 2:
				myVid.width = myVid.videoObject.videoWidth * 2;
				myVid.height = myVid.videoObject.videoHeight * 2;
				break;
			case 3:
				myVid.width = myVid.videoObject.videoWidth / 2;
				myVid.height = myVid.videoObject.videoHeight / 2;
				break;
		}

	}

	// *********************************************************
	// 再生ヘッド位置の表示
	// *********************************************************
	private function currentTimeChange( e:TimeEvent ):void {

		progressBar.setProgress(
			e.time,
			e.currentTarget.duration
		);

	}

	// *********************************************************
	// スライダー変更イベント
	// *********************************************************
	private function changeVolume( ):void {

		myVid.volume = hSlider.value;

	}

	// *********************************************************
	// スライダー変更イベント
	// *********************************************************
	private function readyVideo( ):void {

		try {
			changeSize(1);
			this.height = myVid.videoObject.videoHeight + 200;
			if ( this.width < myVid.videoObject.videoWidth ) {
				this.width = myVid.videoObject.videoWidth + 10;
			}
		}
		catch(e:*){
		}

	}

]]>
</fx:Script>

<s:Panel
	title="超シンプル flv プレーヤー"
	percentHeight="100"
	percentWidth="100"
>
	<s:VGroup width="100%">

		<s:HGroup>
			<s:Button
				label="Play"
				click="myVid.play();"
				width="60"
			/>
			<s:Button
				label="Pause"
				click="myVid.pause();"
				width="60"
			/>
			<s:Button
				label="Stop"
				click="play_Reset();"
				width="60"
			/>
			<s:HSlider
				 id="hSlider"  
				 minimum="0"  
				 maximum="1"  
				 value="0.7"  
				 snapInterval="0.1"  
				change="changeVolume();"
			/>
		</s:HGroup>

		<mx:ProgressBar
			id="progressBar"
			mode="manual"
			label=""
			width="100%"
			click="setTime(event)"
			visible="true"
		/>

		<s:VideoDisplay
			id="myVid"
			autoPlay="false"
			autoRewind="false"
			complete="progressBar.setProgress(100,100);"
			source="sample.mp4"
			currentTimeChange="currentTimeChange(event);"
			durationChange="readyVideo();"
		/>

	</s:VGroup>



</s:Panel>

</s:WindowedApplication>

Flex3 のコードも、記念にコメントで残しているところがあります。
mx を使わずに spark を使うように変えるところが基本ですが、よく
もまあこんなに違うものにしてくれたなぁ・・・

というのが実感です。

それはまだしも、trace メソッドが動作しないのにはあきれました。
スキンの角を丸くできないし、@namespace 書かないとエラーになる
し、Flex2 当時も結構苦労しましたが、経験無いと時間ばかりかかる
ので必要無いならかかわらないほうがいいです。

ビルドは全て DOS ベースでやってます。Flex Builder は昔使った事
ありますが、最低だった印象しかありません。やめたほうがいいです。

もう少し整備したらビルドパッケージもリリースします。そうすれば、
誰でも簡単に片目つぶってでも作れるようになります。

前提としては、java が必要ですが、今の環境は 1.7.0_01 です。

あんのじょう、Java7 で問題が出ました。AIR のパッケージを作る
adt でエラーが出ます。とりあえず、1.6.0_16 に変更しました。



【オワコンの最新記事】
posted by at 2012-03-21 04:38 | Comment(0) | オワコン | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Custom Search
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。