我在我的Android应用程序中实现了Google Maps V2,现在我想做一些不同的事情。我用标记显示位置(经度,纬度)。问题是这在我的活动中显示为Map。我想将它显示为ImageView,只有当有人点击它时才显示地图界面。
基本上我想做的是静态预览位置并将其显示为图片(带框架和圆角)点击后打开地图并提供所有功能。
有没有办法将地图片段放入ImageView?
您可以提供的任何帮助都将非常感谢。
由于
答案 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
生成以下图像:
这使得在ImageView
小部件中显示地图变得非常容易:您只需要根据位置数据和维度构建适当的URL,然后使用任何图像加载框架显示图像,例如毕加索,排球,& c。我们已经使用这个功能几年了。
这在显示ListView
小地图时特别有用。在这些情况下,要求 n 快照会有问题,而 n 图像下载应该可以正常工作。
根据this announcement,第三个选项将在下周左右推出,是新的精简版地图模式,该模式将作为Google Play Services 6.5的一部分发布:
此外,还有一个新的'精简模式'地图选项,非常适合 你想要提供一些较小的地图的情况,或者 如此小的地图,有意义的交互是不切实际的,例如 作为列表中的缩略图。精简模式映射是映射的位图图像 在指定的位置和缩放级别。
在lite模式下,标记和形状在客户端绘制 静态图像,所以你仍然可以完全控制它们。精简模式 支持所有地图类型,“我的位置”图层和子集 完全交互式地图的功能。
听起来与您的需求完全相同,前提是您可以等待几天以获取更新的SDK。 :)