2017-07-28 65 views
1

我正在使用Android.gms.maps類在我的Xamarin Forms應用程序中爲Android手機創建自定義渲染器Google地圖。我期待將圖像添加到我的地圖使用GroundOverlayOptionsXamarin-Forms | Android - GroundOverlayOptions中的參考圖像

GroundOverlayOptions newarkMap = new GroundOverlayOptions() 
    .InvokeImage(BitmapDescriptorFactory.FromResource(/*My image?*/)) 
    .position(e.Point, 8600f, 6500f); 
    map.AddGroundOverlay(newarkMap); 

我需要在我的代碼的註釋部分的圖像資源ID。如何找到圖片的資源ID?有沒有其他方法可以做到這一點?

回答

1

使用BitmapDescriptorFactory有可供你如何獲得BitmapDescriptor

  • FromResource
  • FromAsset
  • FromPath
  • FromBitmap

兩個例子多個選項:

要使用FromResource,圖像必須是你的資源樹中,assumably內Drawable子文件夾,Xamarin將產生的Resource.Drawable.XXXXX形式的ID描述你和這將是一個整型常量:

var overlayOption = new GroundOverlayOptions() 
    .InvokeImage(BitmapDescriptorFactory.FromResource(Resource.Drawable.overlayface2)) 
    .Position(e.Point, 5000f, 5000f); 

enter image description here

FromAsset負載從 「資產」 子文件夾中的圖像:

var overlayOption = new GroundOverlayOptions() 
    .InvokeImage(BitmapDescriptorFactory.FromAsset("OverlayFace.png")) 
    .Position(e.Point, 5000f, 5000f); 

enter image description here

FromPath負荷從任意路徑的形象,所以你可以加載您下載並存儲在應用程序的緩存目錄中的圖像,或存儲在SD卡的圖像,等等

var overlayOption3 = new GroundOverlayOptions() 
    .InvokeImage(BitmapDescriptorFactory.FromPath("/mnt/sdcard/Download/OverlayFace.png")) 
    .Position(e.Point, 5000f, 5000f); 

注意:人們碰到的最大問題是沒有正確設置圖像的大小,它在公里。不是像素,不是英里等...

注意:也爲了速度,保持你的圖像大小在2的冪,否則地圖庫將不得不將它轉換成每次它的權力2圖像加載覆蓋(內存和性能命中)

+0

今天@SushiHangover你是一個救星! –

+1

@BarneyCambrie沒有問題,我使用'FromPath'很多,因爲我的應用程序將地圖疊加層下載到應用程序的緩存目錄中(機場信息和基於KML的矢量機場圖紙等) – SushiHangover