AIR/Flex: 2010年3月アーカイブ

う~む、Google Maps API には、小さな地図用の GSmallZoomControl というズームコントロールがあるのだが、Google Maps API For Flash には無いみたい。

Google Maps API for Flash のコントロール」ドキュメントを読んでみたけど、載ってないねえ。試しに色々やってみたけど、やっぱ駄目っぽい。

デスクトップ上で動かす地図アプリなのだが、画面を小さくすると普通の ZoomControl だとはみ出ちゃうので、取りあえず

public var TopLeft:ControlPosition = new ControlPosition(ControlPosition.ANCHOR_TOP_LEFT, 5, 5);
public var MyZoomControl:ZoomControl = new ZoomControl(new ZoomControlOptions({position: TopLeft}));

と、グローバル宣言しておいて、画面縮小時は

map.removeControl(MyZoomControl);

し、画面を拡大した時には改めて、

map.addControl(MyZoomControl);

するようにした。

まあ、小さな地図でそれほど縮小を切り替えたいというニーズは無いんじゃないかと思うので、これでいいんじゃないかなぁ・・・

air_bug20100311.png

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日無駄にしてしまった(^^;)

ウィンドウの透明化を行う際にメインウィンドウのMXMLタグを<mx:WindowedApplication>から<mx:Application>に変更するという説明をしているサイトがあるが、もちろんそんな必要は無い。
多分、<mx:Application>にするとタイトルバーやステータスバーの表示がされなくなるので・・・ということだろうが、それは<mx:WindowedApplication>の中のメソッドで指定すれば良い話。

それに、<mx:Application>に変更すると、俺の環境では透過PNGが透過しなくなるという問題が発生する。

ということで、hogehoge_app.xml の

<systemChrome>none</systemChrome>
<transparent>true</transparent>

この部分の指定を行ったら、

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="absolute" backgroundAlpha="0" alwaysInFront="true"
 <略>
 showGripper="false"
 showInAutomationHierarchy="false"
 showStatusBar="false"
 showTitleBar="false"
>

とするか、別に初期化の function を

private function onInit():void{

 showGripper=false;
 showInAutomationHierarchy=false;
 showStatusBar=false;
 showTitleBar=false;

}

てな具合に書いて、<mx:WindowedApplication> の記述を

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
 <略>
 initialize="initProc()"
>

としてもよい。
まあ、後者の方が、<mx:WindowedApplication> もすっきりしていいかもね。

ほんと、Adobe のソフトは設計が悪いな。
元々 Mac のソフトばかり作ってた会社だからしょうがないのか?

Flex Builder 3 でワークスペースをディフォルトの位置から外付け HDD 上のフォルダに切り替えたところ、

An error has occurred. See the log file M:\Workspace\.metadata\.log.

てなエラーが出始めて、Flex Builder 3 が起動不可に・・・

どういう実装やねん。(^^;

実際、マイドキュメント以下には新規のワークスペースを作成できるので、Windows 7 の権限コントロールの実装が変なのかもしれんが、Flex Builder 3 が起動できなくなるというのはどういうことやねん?

普通「エラーが発生したので、別のワークスペースを選択してください」みたいなメッセージ出して、他のワークスペースを選択出来るようにするべきじゃろ。
ワークスペースの切替が出来ないので、何回再起動しても、

An error has occurred. See the log file M:\Workspace\.metadata\.log.

と出て終わりなんて、何を考えとんねん・・・Adobe~

結局、再インストールをするハメに・・・

ま、Windows 7 には正式には対応してないからな。これ以上文句は言わんが、実装はちゃんと考えてほしいと思う、今日この頃であった。(XP Mode で動かした方が良いか・・・)

このアーカイブについて

このページには、2010年3月以降に書かれたブログ記事のうちAIR/Flexカテゴリに属しているものが含まれています。

前のアーカイブはAIR/Flex: 2009年3月です。

次のアーカイブはAIR/Flex: 2010年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら