Google Maps API for Flash 使って、地図検索の AIR アプリを作っていたのだが、どうも動きが変。
下のソースのように、240x240の正方形のWindowの上に、それより小さなCanvasを用意して、それいっぱいに Google Maps を配置する形。
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" borderStyle="none"
width="240" height="240"
backgroundAlpha="0"
verticalScrollPolicy="off" horizontalScrollPolicy="off"
initialize="initProc()">
<mx:Image x="0" y="0" source="img/mapsearch.png" id="img1" mouseDown="stage.nativeWindow.startMove();"/>
<mx:Canvas x="12" y="23" width="216" height="159"
cornerRadius="5" borderStyle="solid"
verticalScrollPolicy="off" horizontalScrollPolicy="off"
borderColor="#B7BABC"
>
<maps:Map xmlns:maps="com.google.maps.*" id="map"
mapevent_mapready="onMapReady(event)"
width="100%" height="100%"
url="http://code.google.com/apis/maps/"
key="...key..."
/>
</mx:Canvas>
...
これで、地図の上でマウスの左ボタンを押せば地図画像をドラッグできるし、その他の部分で押せばメイン Window を自由に動かすことが出来る。
・・・のだが、なんか、メイン Window の左端でマウスをクリックするとメイン Window が画面の左端まで動いちゃうし、下の方で押せば Window の高さが短く(低く)なっちゃうとか、色々怪しい動きをする。
Windows 7 Professional と Max OS X 10.5 でそうなっちゃうのを確認。Window XP Mode(Windows Virtual PC) だと発生しない。
試しに Canvas を使わずに直接メイン Window 上に Map を設置してみると、Window が左に動く時には、Window サイズが右の方に広がっていることが確認できた。地図がメイン Window からはみ出したように見える。
試しに、Alt + PrintScreen でこのアプリの大きさを Windows がどう捉えているのか確認してみたら、やっぱり本来の 240x240 ではなく大きく認識してた。
リサイズされちゃってるのだ・・・
確かに、リサイズの操作そのものが出来ないので(mouseDown="stage.nativeWindow.startMove();" にしてるし)明示的にリサイズ禁止にはしてないが・・・
結局、ADF ファイル側でアプリの大きさの指定と、リサイズ等の操作を明示的に禁止する
<minimizable>false</minimizable>
<maximizable>false</maximizable>
<resizable>false</resizable>
<width>240</width>
<height>240</height>
という記述を行うことで問題は解決。
しかし、マウスダウンで Window の移動開始のイベントが実行されるはずなのに、何とも謎じゃのお。(おかげで1日無駄にしてしまった(^^;)