我想在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. 顯示在谷歌地圖上的Android
- 4. 靜態谷歌地圖不顯示在iOS7.1上
- 5. 谷歌靜態地圖圖像未顯示在Firefox
- 6. 如何在靜態谷歌地圖上顯示更多點數。錯誤414
- 7. 如何靜態谷歌地圖
- 8. 谷歌靜態地圖沒有使用谷歌地圖API
- 9. Access 2010中顯示谷歌的靜態地圖圖像
- 10. 如何在Android Apk應用程序上顯示谷歌地圖?
- 11. 如何在谷歌地圖Android上顯示多個標記?
- 12. 如何在Android模擬器上顯示谷歌地圖?
- 13. 標記不顯示在靜態谷歌地圖
- 14. 谷歌靜態地圖問題(不顯示)
- 15. 谷歌靜態地圖只顯示img圖標
- 16. 在android中顯示谷歌地圖webview
- 17. 谷歌地圖不顯示在Android
- 18. 在Android的谷歌地圖顯示textview
- 19. 谷歌地圖不顯示?
- 20. 谷歌靜態地圖在Android設備上的最大尺寸
- 21. 如何顯示在谷歌地圖
- 22. 谷歌地圖api 2如何顯示/隱藏谷歌地圖?
- 23. 顯示在谷歌地圖
- 24. Android谷歌地圖顯示爲圖片
- 25. 在谷歌地圖上顯示英國
- 26. 在谷歌地圖上顯示風向
- 27. 在谷歌地圖上顯示文本
- 28. 谷歌地圖不顯示在Firefox上
- 29. 谷歌地圖不顯示
- 30. 谷歌靜態地圖顯示折線使用編碼路線
不知道......謝謝你的分享! – 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