【问题标题】:Android Google Map to show as pictureAndroid谷歌地图显示为图片
【发布时间】:2014-11-21 05:34:15
【问题描述】:

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

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

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

您能提供的任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: android google-maps imageview android-imageview


    【解决方案1】:

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

    【讨论】:

    • 如何初始化mMap对象?我知道它是一个 GoogleMap 类型的对象,但你如何初始化它?
    • 请回答以上问题?
    • 这超出了范围。请提出一个新的堆栈溢出问题。
    【解决方案2】:

    如果您的应用可以使用网络,有一个稍微不同的选项可以实现相同的结果并且只需要很少的编码:您可以调用Google Static Maps API 来请求具有任意中心、缩放级别、大小的地图图像,以及其他功能,例如标记和路径。

    例如链接:

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

    生成以下图像:

    这使得在ImageView 小部件中显示地图变得非常容易:您只需从位置数据和尺寸构建适当的 URL,然后使用任何图像加载框架(例如 Picasso)显示图像,排球等。我们已经使用这个功能几年了。

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


    根据this announcement 的说法,将在下周左右推出的第三个选项是新的 Lite Maps 模式,它将作为 Google Play Services 6.5 的一部分发布:

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

    在精简模式下,标记和形状在客户端绘制在 静态图像,因此您仍然可以完全控制它们。精简模式 支持所有地图类型、My Location 图层和 完全交互式地图的功能。

    听起来完全符合您的需求,前提是您可以等待几天更新 SDK。 :)

    【讨论】:

    • 非常感谢您的回答。这里的两个答案同样出色。我正在评估哪一个最适合我。谢谢!!!!
    • @tzuvy 希望对您有所帮助!顺便说一句,作为 Play Services 的一部分刚刚宣布了一项新功能,我认为这将是一个更好的解决方案。相应地编辑了答案。
    • 当您的位置数量较少但我需要添加更多无法工作的位置时,此答案很有用,因为 URL 长度限制......还有其他解决方案吗?
    • googlemap 静态 api 需要计费,不是免费的
    猜你喜欢
    • 2016-04-09
    • 2018-05-16
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多