こんにちは。エクセルソフトの田淵です。
Xamarin ドキュメントの Google Map の章 にある Xamarin.Android の Google Map のコードです。
MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.my_mapfragment_container); GoogleMap map = mapFrag.Map; if (map != null) { // The GoogleMap object is ready to go. }
MapFragment の Map が使われていますが、depracated だと怒られるんですよね。
Android Java の場合
どうすればいいのかな?ということで Google の Android ドキュメントを見てみました。
マップ オブジェクト | Google Maps Android API | Google Developers
OnMapReadyCallback インターフェースを実装し、onMapReady(GoogleMap) コールバック メソッドを使用して GoogleMap オブジェクトに対するハンドルを取得します。
フラグメントで getMapAsync() を呼び出して、コールバックを登録します。
ふむふむ。
public class MainActivity extends FragmentActivity implements OnMapReadyCallback { ... }
次に、getMapAsync() を使用して、フラグメントにコールバックを設定します。
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
ふむふむ。
C# で書き直してみます。
ベーシックな部分は @amay077 さんの Build Insider の記事をご覧ください。
記事では Xamarin Component を使用していますが、現在は分割されたライブラリが NuGet にありますので、そちらを使います。
using
を追加して、Android ドキュメントの通りに IOnMapReadyCallback
の継承を追加します。
using Android.Gms.Maps; using Android.Gms.Maps.Model; ... public class MainActivity : Activity, IOnMapReadyCallback
OnCreate
メソッド内に Google Map 呼び出しを追加します。これも Android ドキュメント通りですね。
var mapFrag = (MapFragment)FragmentManager.FindFragmentById(Resource.Id.myMap);
mapFrag.GetMapAsync(this);
Visual Studio が IOnMapReadyCallback.OnMapReady(GoogleMap)
の実装が無いとアラートしてくれているので、追加し、そこに Map 表示時の初期設定を記載します。後でマップを操作するので、クラス変数に GoogleMap gMap
を追加しています。
public void OnMapReady(GoogleMap map) { gMap = map; // 初期設定 gMap.UiSettings.MyLocationButtonEnabled = true; gMap.UiSettings.ZoomControlsEnabled = true; gMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(35.6586d, 139.7454d), 15f)); }
これで無事 Google Map が起動しました。
Emulator は Google APIs Intel Atom (x86) を使用しました。快適♪
これであってるのかどうか、識者の方はコメントいただけると嬉しいです。
Xamarin 気になった方は
是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 2 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソース や JXUG リンクページ に参考資料を纏めてますので併せてどうぞ。
Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。
私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)、Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。
以上です。