我想在imageview上显示一个静态的google地图。类似于“WhatsApp”在分享位置时显示的内容。我怎样才能做到这一点?如何在android imageview上显示静态谷歌地图?
回答
Google提供免费的静态地图API。
您可以从网站下载动态配置的位图,将其存储在文件系统或内存中,然后从中获取可绘制的图表以将其设置为ImageView。
您需要从坐标中生成一个url,以便使用此URL从Web上加载数据。为例为200x200的位图显示在巴黎的艾菲尔铁塔:
String latEiffelTower = "48.858235";
String lngEiffelTower = "2.294571";
String url = "http://maps.google.com/maps/api/staticmap?center=" + latEiffelTower + "," + lngEiffelTower + "&zoom=15&size=200x200&sensor=false"
StackOverflow上已经有了关于如何从网上下载的图像,以便在imageview的显示它的一些答案:https://stackoverflow.com/search?q=imageview+url+%5Bandroid%5D
你可以找到这里是Google Static Maps API的文档。
首先,您将在可绘制文件夹中显示的地图图像用作该图像视图的背景。
不相关的问题 – 2017-03-25 04:10:55
public static Bitmap getGoogleMapThumbnail(double lati, double longi){
String URL = "http://maps.google.com/maps/api/staticmap?center=" +lati + "," + longi + "&zoom=15&size=200x200&sensor=false";
Bitmap bmp = null;
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(URL);
InputStream in = null;
try {
in = httpclient.execute(request).getEntity().getContent();
bmp = BitmapFactory.decodeStream(in);
in.close();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bmp;
}
此代码已过时! – 2016-09-22 13:06:37
正如@pcans所说,我真的很喜欢他的解决方案。您可以使用字符串作为URL在ImageView中加载图像。我建议图像加载第三方库: https://github.com/koush/ion
希望它可以帮助你:)
您还可以用本身现在SDK显示静态图像(这是在2014年12月加入): https://developers.google.com/maps/documentation/android/lite
这将导致一个MapView。
这是现今最好的答案。 – swooby 2015-05-17 17:38:35
很好的答案...谢谢:) – charlotte 2015-05-29 10:59:58
你有一个完整的例子,如何使用它? – smartmouse 2015-09-30 15:51:27
此外,另一种解决方案是毕加索库:“强大的图像下载和缓存库为Android”
你给图片网址,毕加索,然后它做一个GET请愿书,并加载图像。如果申请失败,毕加索可以设置默认图片。
您甚至可以在加载图像时设置进度动画。
这是一个很好的和干净的解决方案。
一个例子:
ImageView ivUrl = (ImageView) view.findViewById(R.id.iv_photo);
Picasso.with(getContext()).cancelRequest(ivUrl);
Picasso.with(getContext())
.load(imageUrlString)
.error(R.drawable.ic_error)
.placeholder(R.drawable.progress_animation)
.into(ivUrl);
Web视图是我为它的建议。
创建一个HTML文件中资源文件夹的html文件夹内static_map.html
其内容可能会像下面
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
html,body{
padding:0;
margin:0;
}
.map{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<img class="map" src="REPLACE_HERE" >
</body>
</html>
然后编程创建静态地图网址并更换REPLACE_HERE字符串与它。然后将其加载到Web视图中。这将极大地减少我们的努力。
的代码如下
try {
String url ="https://maps.googleapis.com/maps/api/staticmap?";
url+="&zoom=13";
url+="&size=600x300";
url+="&maptype=roadmap";
url+="&markers=color:green%7Clabel:G%7C"+latitude+", "+longitude;
url+="&key="+ YOUR_GOOGLE_API_KEY;
InputStream is = context.getAssets().open("html/static_map.html");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
String str = new String(buffer);
str = str.replace("REPLACE_HERE", url);
wv_map.getSettings().setJavaScriptEnabled(true);
wv_map.loadDataWithBaseURL("", str, "text/html", "UTF-8", "");
} catch (IOException e) {
}
- 1. 如何显示在谷歌静态地图全航线的Android
- 2. 谷歌静态地图不显示
- 3. 谷歌静态地图图像未显示在Firefox
- 4. 如何在静态谷歌地图上显示更多点数。错误414
- 5. 谷歌静态地图没有使用谷歌地图API
- 6. 如何静态谷歌地图
- 7. Access 2010中显示谷歌的静态地图图像
- 8. 如何在Android模拟器上显示谷歌地图?
- 9. 在Android的谷歌地图显示textview
- 10. 在android中显示谷歌地图webview
- 11. 谷歌静态地图只显示img图标
- 12. 显示在谷歌地图
- 13. 在谷歌地图上显示文本
- 14. 谷歌地图不显示在Firefox上
- 15. 在谷歌地图上显示英国
- 16. 在谷歌地图上显示风向
- 17. 如何在android中的webview中显示本地谷歌地图?
- 18. Android - 如何显示谷歌地图上的确切位置?
- 19. 谷歌地图上没有显示
- 20. 混合静态/动态谷歌地图
- 21. Android - 谷歌地图 - 如何在地图上显示多个标记?
- 22. 谷歌静态地图图像帮助
- 23. 谷歌地图内模态不显示
- 24. 谷歌地图不显示
- 25. Android谷歌地图不显示
- 26. 的Android谷歌地图显示
- 27. android谷歌地图标记不显示
- 28. Android,谷歌地图不会显示
- 29. Android谷歌地图显示旧位置
- 30. android谷歌地图显示栏
不知道......谢谢你的分享! – WarrenFaith 2011-03-17 12:19:56
太棒了!我使用了第二个mapview,这给我带来了很多麻烦(通常每个进程只能有一个),但我可能会坚持这个解决方案。只是一个问题 - 每个应用程序的25k下载(https://developers.google.com/maps/documentation/staticmaps/#Limits)是否适用于此?如果是这样,他们如何检查它?请求来自不同的设备,网址没有API密钥... – 2012-11-29 11:55:51
你是对的,没有API密钥,他们无法强制执行每个应用25K限制。目前这个API可能没有限制,如果请求来自不同的IPS。 – pcans 2012-12-02 12:49:22