如何在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
希望它可以帮助你:)
首先,将您在可绘制文件夹中显示的地图的图像用作该图像的背景。