2016-12-27 2 views
0

Попытка отображения круга на карте с помощью Custom Renderer. (Android)Последняя версия Xmarin.Forms.Maps разбивает пользовательский рендерер

Обновлено Xamarin.Forms.Maps to 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 Renderer:

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 
}; 
+0

Метод подписи должен быть 'защищен переопределения недействительным OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs e) '(вы можете оставить некоторые пространства имен, если вы добавите их в свой список пользователей). Вы уверены, что это называется? Вы поставили какие-то точки останова в этом попадании? –

+0

Это то, что у меня было, но эта линия не работает. –

+0

Если вы наберете 'override' и предложите IntelliSense предложить вам? С чем это связано? –

ответ

0

с использованием Xamarin.Forms.Maps v2.3.3.193

protected override void OnElementChanged(ElementChangedEventArgs<Map> e) { 
    base.OnElementChanged(e); 
    if(e.OldElement != null) { } 
    if(e.NewElement != null) { 
     var formsMap = (CustomMap)e.NewElement; 
     circle = formsMap.Circle; 
     ((MapView)Control).GetMapAsync(this); 
    } 
}