【发布时间】:2017-06-05 09:01:43
【问题描述】:
尝试使用自定义渲染器在地图上显示一个圆圈。 (安卓)
将 Xamarin.Forms.Maps 更新到 v2.3.3.175,现在出现错误:CustomMapRenderer.OnElementChanged(ElementChangedEventArgs)':找不到合适的方法来覆盖。
以前工作过没有问题。甚至下面链接中的示例也不再有效。 https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/maps/map-overlay/circle/
将ElementChangedEventArgs<View> 更改为ElementChangedEventArgs<Map> 可解决错误,但渲染器永远不会被调用,因此圆圈永远不会显示。
有什么想法吗?提前致谢。
我的自定义 Android 渲染器:
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Xamarin.Forms;
using Xamarin.Forms.Maps.Android;
using GasFinder;
using MapOverlay.Droid;
[assembly: ExportRenderer(typeof(CustomMap),typeof(CustomMapRenderer))]
namespace MapOverlay.Droid {
public class CustomMapRenderer:MapRenderer, IOnMapReadyCallback {
GoogleMap map;
CustomCircle circle;
protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<View> e) {
base.OnElementChanged(e);
if(e.OldElement != null) {
// Unsubscribe
}
if(e.NewElement != null) {
var formsMap = (CustomMap)e.NewElement;
circle = formsMap.Circle;
((MapView)Control).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap googleMap) {
map = googleMap;
var circleOptions = new CircleOptions();
circleOptions.InvokeCenter(new LatLng(circle.Position.Latitude,circle.Position.Longitude));
circleOptions.InvokeRadius(circle.Radius);
circleOptions.InvokeFillColor(0X233273b1);
circleOptions.InvokeStrokeColor(0X64007eff);
circleOptions.InvokeStrokeWidth(10);
map.AddCircle(circleOptions);
}
}
}
CustomMap.cs如下:
using System.Collections.Generic;
using Xamarin.Forms.Maps;
namespace GasFinder {
public class CustomMap:Map {
public CustomCircle Circle { get; set; }
}
}
CustomCircle.cs如下:
using Xamarin.Forms.Maps;
namespace GasFinder {
public class CustomCircle {
public Position Position { get; set; }
public double Radius { get; set; }
}
}
我的 Page.xaml.cs 上的代码如下:
var position = new Xamarin.Forms.Maps.Position(Search.loc.lat,Search.loc.lng);
customMap.Circle = new CustomCircle {
Position = position,
Radius = Settings.Distance*1000
};
【问题讨论】:
-
方法签名应该是
protected override void OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Xamarin.Forms.Maps.Map> e)(如果你将它们添加到你的使用列表中,你可以省略一些命名空间)。你确定它被称为?你有没有在那个被命中的地方设置断点? -
这就是我所拥有的,但那行不起作用。
-
如果您输入
override并让 IntelliSense 建议您?它想出了什么? -
嗨@RussellCorbin 你最终解决了这个问题吗?目前面临同样的问题
-
是的,我做到了。我会尽快发布代码。
标签: xamarin xamarin.forms