2014-11-15 112 views
9

我已經在我的android應用中實現了谷歌地圖V2,現在我想做一些不同的事情。我用一個標記顯示了一個位置(經度,緯度)。問題在於,這在我的活動中顯示爲地圖。我想將它顯示爲ImageView,並且只有當有人點擊它時才顯示地圖界面。Android谷歌地圖顯示爲圖片

基本上我想要做的是位置的靜態預覽,並將其顯示爲圖片(帶有框架和圓角)點擊後,打開地圖並提供所有功能。

有沒有辦法將地圖片段放入ImageView?

任何幫助,您可以提供將不勝感激。

感謝

回答

16

您可以使用谷歌地圖內置的快照方法,捕獲預覽,並在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(); 
      } 
     }); 
    } 
}); 
+0

您能否提供完整代碼 – Abhishek

11

有一個稍微不同的選項,可以達到同樣的效果,需要非常少的編碼,提供您的應用程序可以使用網絡:您可以撥打Google Static Maps API索要任意一個地圖圖像中心,縮放級別,大小和其他功能(如標記和路徑)。

例如鏈接:

https://maps.googleapis.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=14&size=600x300

產生以下圖片:

enter image description here

這使得它非常容易地顯示在ImageView部件的地圖:你只需要根據位置數據和尺寸構建適當的URL,然後使用任何圖像加載框架(如Picasso,Volley,)顯示圖像c。我們現在已經使用了這個功能幾年了。

這在顯示小地圖的ListView時特別有用。在這些情況下,要求提供n快照會有問題,而n圖像下載應該可以正常工作。


第三種選擇,這將在未來一週左右變爲可用,根據this announcement,是新精簡版地圖模式,該模式將被釋放6.5谷歌Play服務的一部分:

此外,還有一種情況,你要提供一些小的貼圖,或者 地圖是如此之小,有意義的互動是不切實際的,例如 作爲一個新的「精簡版模式」地圖選項,非常適合 情況縮略圖在列表中。精簡模式地圖是位於指定位置和縮放級別的地圖 的位圖圖像。

在lite模式下,標記和形狀繪製在客戶端的靜態圖像頂部,因此您仍然可以完全控制它們。精簡模式 支持所有地圖類型,我的位置圖層和一個完全交互式地圖的功能子集。

聽起來和你需要的完全一樣,前提是你可以等待更新的SDK幾天。 :)

+0

非常感謝您的回答。這裏的兩個答案同樣偉大。我正在評估哪一個最適合我。謝謝!!!! – tzuvy

+0

@ zuvy希望它有幫助!順便說一句,剛剛宣佈了一項新功能,作爲Play Services的一部分,我認爲這將是更好的解決方案。據此編輯答案。 – matiash