web-dev-qa-db-ja.com

Android Googleマップを画像として表示

AndroidアプリにGoogleマップV2を実装しましたが、今度は別のことをしたいと思います。場所(経度、緯度)をマーカーで表示しています。問題はこれですアクティビティにマップとして表示されています。ImageViewとして表示したいのですが、誰かがクリックした場合にのみマップインターフェイスが表示されます。

基本的に私がやりたいのは、場所の静的プレビューとそれを画像として表示することです(フレームと丸みを帯びた角)クリックするとマップを開き、すべての機能を提供します。

マップフラグメントをImageViewに配置する方法はありますか?

あなたが提供できるどんな助けも大いに感謝されます。

ありがとう

14
tzuvy

Googleマップに組み込まれているスナップショット方式を使用して、プレビューをキャプチャし、それをImageViewに表示できます。 ImageViewのスタイルは任意に設定でき、プレビューがクリックされたときに何かを実行するclickListenerを設定することもできます。次に例を示します。

LatLng latLng = new LatLng(35.0116363, 135.7680294);
// Add Marker
mMap.addMarker(new MarkerOptions().position(latLng));
// Center map on the marker
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(latLng, 4.0f);
mMap.animateCamera(yourLocation);

final ImageView mapPreview = (ImageView) findViewById(R.id.mapPreview);
mapPreview.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // Hide the preview, to reveal the map
        mapPreview.setImageBitmap(null);
        mapPreview.setLayoutParams(new RelativeLayout.LayoutParams(0, 0));

        // Or start Google Maps app
//      String uri = String.format(Locale.ENGLISH, "geo:%f,%f", 50.0, 0.1);
//      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
//      startActivity(intent);
    }
});

mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
    @Override
    public void onMapLoaded() {
        // Make a snapshot when map's done loading
        mMap.snapshot(new GoogleMap.SnapshotReadyCallback() {
            @Override
            public void onSnapshotReady(Bitmap bitmap) {
                mapPreview.setLayoutParams(new RelativeLayout.LayoutParams(
                        ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.MATCH_PARENT));
                mapPreview.setImageBitmap(bitmap);

                // If map won't be used afterwards, remove it's views
//              ((FrameLayout)findViewById(R.id.map)).removeAllViews();
            }
        });
    }
});
20
Simas

アプリがネットワークを使用できる場合、同じ結果を達成でき、コーディングをほとんど必要としないわずかに異なるオプションがあります。 Google Static Maps API 任意の中心、ズームレベル、サイズ、およびマーカーやパスなどの他の機能を備えたマップ画像を要求します。

たとえば、リンク:

https://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=14&size=600x3

次の画像を生成します。

enter image description here

これにより、ImageViewウィジェットで地図を非常に簡単に表示できます。位置データとディメンションから適切なURLを作成し、Picassoなどの画像読み込みフレームワークを使用して画像を表示するだけです。ボレー、&c。この機能は2、3年使用しています。

これは、たとえばListViewの小さな地図を表示する場合に特に便利です。このような状況では、nスナップショットの要求は問題になりますが、nイメージのダウンロードは問題なく機能するはずです。


この発表 によると、来週かそこらで利用可能になる3番目のオプションは、新しいLite Mapsです。 Google Play開発者サービス6.5の一部としてリリースされるモード:

さらに、新しい「ライトモード」マップオプションもあります。これは、多数の小さいマップ、またはリスト内のサムネイルなど、意味のある対話が実用的でないほど小さいマップを提供する場合に最適です。ライトモードマップは、指定された場所とズームレベルにあるマップのビットマップイメージです。

ライトモードでは、マーカーとシェイプは静止画像の上にクライアント側で描画されるため、引き続き完全に制御できます。ライトモードは、すべてのマップタイプ、現在地レイヤー、および完全にインタラクティブなマップの機能のサブセットをサポートします。

更新されたSDKを数日待つことができれば、必要なものとまったく同じように聞こえます。 :)

17
matiash