我在一个应用程序上工作,其中用户必须发现的地方。我使用它来显示地图上有未发现的地方的区域:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/map/circle-map-overlay
但后来,尽管app的功能有所增长,但它不再运行良好。这是我的github的链接。https://github.com/jakuboles/TDKInz2020/tree/master/TDK
在用户登录之后,在TDK.MainPage.xaml.cs.DisplayInMap之前调用TDK.Android.CustomMapRenderer.OnElementChanged函数要快得多,我在其中设置了哪些地方应该显示为已发现,哪些地方应该显示为未发现。在结果中,现在应用程序总是在TDK.Android.CustomMapRenderer.OnElementChanged第36行,位置列表将始终为空,并且在调用OnMapReady来绘制圆圈列表时,列表为空。
当DisplayInMap将地点分配给列表时,有什么方法可以再次调用OnElementChanged吗?或者在DisplayInMap设置list之后,使OnElementChanged运行。
如果这是一个复杂的描述,很抱歉;不知道如何准确地描述。
这是我的Android渲染器:
using Android.Content;
using Android.Gms.Maps.Model;
using Java.Lang;
using MapOverlay;
using MapOverlay.Droid;
using System.Collections.Generic;
using TDK.MapsCustoms;
using Xamarin.Forms;
using Xamarin.Forms.Maps.Android;
[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))]
namespace MapOverlay.Droid
{
public class CustomMapRenderer : MapRenderer
{
List<CustomCircle> circles;
public CustomMapRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Xamarin.Forms.Maps.Map> e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
}
if (e.NewElement != null)
{
var formsMap = (CustomMap)e.NewElement;
circles = formsMap.CircleList;
}
}
protected override void OnMapReady(Android.Gms.Maps.GoogleMap map)
{
base.OnMapReady(map);
foreach (var circle in circles)
{
var circleOptions = new CircleOptions();
circleOptions.InvokeCenter(new LatLng(circle.Position.Latitude, circle.Position.Longitude));
circleOptions.InvokeRadius(circle.Radius);
circleOptions.InvokeFillColor(0X66FF0000);
circleOptions.InvokeStrokeColor(0X66FF0000);
circleOptions.InvokeStrokeWidth(0);
NativeMap.AddCircle(circleOptions);
}
}
}
}发布于 2020-01-14 01:18:42
移动线条
circles = formsMap.CircleList;从OnElementChanged到OnMapReady
https://stackoverflow.com/questions/59703795
复制相似问题