如何在android imageview上显示静态谷歌地图?

我想在imageview上显示一个静态的google地图。 类似于“Whatsapp”同时显示的位置。 我怎样才能做到这一点?

Google提供免费的静态地图API。

您可以从网上下载一个dynamicconfiguration的位图,将其存储在文件系统或内存中,然后从中获取可绘制位图,以将其设置为ImageView。

您需要从坐标中生成一个url,以使用此url从networking加载数据。 例如展示巴黎埃菲尔铁塔的200×200位图:

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

您可以在这里findGoogle Static Maps API的文档。

 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; } 

您现在也可以使用SDK原生地显示静态图片(2014年12月已添加): https : //developers.google.com/maps/documentation/android/lite

这将导致一个MapView。

Web视图是我的build议。

在资产文件夹的html文件夹内创build一个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> 

然后以编程方式创build静态地图URL,并用它replaceREPLACE_HEREstring。 然后将其加载到Web视图上。 这会减less我们的努力。

代码如下

 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) { } 

此外,另一个解决scheme是毕加索图书馆:“ Android的强大的图像下载和caching库

你给毕加索一个图像的url,然后它做了一个GET请愿,并加载图像。 如果请愿失败,那么毕加索可以设置默认图像。

加载图像时甚至可以设置进度animation。

这是一个很好的,干净的解决scheme。

一个例子:

 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); 

正如@pcans所指,我真的很喜欢他的解决scheme。 您可以使用string作为URL在ImageView中加载图像。 我build议为图片加载第三方库: https : //github.com/koush/ion

希望它可以帮助你:)

首先,将您在可绘制文件夹中显示的地图的图像用作该图像的背景。