Android谷歌地图显示为图片

时间:2014-11-15 13:48:02

标签: android google-maps imageview android-imageview

我在我的Android应用程序中实现了Google Maps V2,现在我想做一些不同的事情。我用标记显示位置(经度,纬度)。问题是这在我的活动中显示为Map。我想将它显示为ImageView,只有当有人点击它时才显示地图界面。

基本上我想做的是静态预览位置并将其显示为图片(带框架和圆角)点击后打开地图并提供所有功能。

有没有办法将地图片段放入ImageView?

您可以提供的任何帮助都将非常感谢。

由于

2 个答案:

答案 0 :(得分:19)

您可以使用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();
            }
        });
    }
});

答案 1 :(得分:15)

如果你的应用可以使用网络,有一个稍微不同的选项可以达到相同的结果并且只需要很少的编码:你可以调用Google Static Maps API来询问具有任意中心,缩放级别的地图图像,尺寸和其他功能,如标记和路径。

例如链接:

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

生成以下图像:

enter image description here

这使得在ImageView小部件中显示地图变得非常容易:您只需要根据位置数据和维度构建适当的URL,然后使用任何图像加载框架显示图像,例如毕加索,排球,& c。我们已经使用这个功能几年了。

这在显示ListView小地图时特别有用。在这些情况下,要求 n 快照会有问题,而 n 图像下载应该可以正常工作。


根据this announcement,第三个选项将在下周左右推出,是新的精简版地图模式,该模式将作为Google Play Services 6.5的一部分发布:

  

此外,还有一个新的'精简模式'地图选项,非常适合   你想要提供一些较小的地图的情况,或者   如此小的地图,有意义的交互是不切实际的,例如   作为列表中的缩略图。精简模式映射是映射的位图图像   在指定的位置和缩放级别。

     

在lite模式下,标记和形状在客户端绘制   静态图像,所以你仍然可以完全控制它们。精简模式   支持所有地图类型,“我的位置”图层和子集   完全交互式地图的功能。

听起来与您的需求完全相同,前提是您可以等待几天以获取更新的SDK。 :)