2017-07-28 68 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