AIR : WindowedApplicationと、透明ウィンドウアプリケーション

色々な所に情報はありますが、備忘録として。

Adobe AIRにおいて、最も簡単に透明ウィンドウアプリケーション(タイトルバー等が一切無いアプリ)を作るのに利用するのは、mx:Applicationを利用することです。
コード的には下記の感じ


..


これで、透明なウィンドウを作成することができます。
ちなみにApplicationで作成して、常に前面に表示する場合、

stage.nativeWindow.alwaysInFront = true

で前面表示出来ます。しかし、Applicationで透明ウィンドウアプリケーションを作成した場合、GUIを用いた直感操作でのリサイズ処理が面倒です。いちいちGUIイベントハンドラを作るのは面倒です。
そこで、AIRにはWindowedApplicationというネイティブウィンドウのGUI処理(移動、リサイズ、最小化等)が整っているクラスがあるので、そちらを使って透明ウィンドウアプリケーションを実現します。これによって、利用したい場合はネイティブウィンドウを表示、要らないときは非表示にすることで、美味しいとこ取りを狙います。

まず,xxxxx_app.xmlファイルから

none

true

の,systemChromeとtransparentを引用している通りに編集する。編集する前はコメントアウトされています.


..
private function onInit():void{
showGripper=false;
showInAutomationHierarchy=false;
showStatusBar=false;
showTitleBar=false;
}
..


こんな感じ。これで、透明ウィンドウのアプリケーションになります。WindowedApplicationにおいて、showXXX()は、基本的にNativeWindowの枠やステータスバーなどの表示非表示指示をするメソッドになっています。今は簡単のためinitializeで駆動するメソッドである、onInit()で処理をしていますが、この部分を他のメソッドにまとめて、マウスイベントのロールオーバーやロールアウトのイベントで駆動するようにすれば、任意のタイミングでNativeWindowのGUIを呼び出すことが出来るようになります。

但し、showXXXで非表示になったコンポネントは、非表示状態でもマウスリスナが反応します。つまり、ドラッグ処理等をすると、リサイズが効いたり、移動したりすることがあります。厳密にこれを回避する為には、非表示中はマウスイベントが反応しないようにする処理を記述する必要があるでしょう。私はあまり困らないのでやっていませんが:)

恐らく、Application、WindowedApplicationどちらを使うかは、一長一短だと思います。用途に合わせて使い分けられるようにしておくと良いと思いますよ。

ということで、WindowedApplicationを利用した、透明ウィンドウアプリケーションの作成tipsでした。