[英]Xamarin.Forms.Maps 2.3.4 custom MapRenderer disables everything
[英]Xamarin Forms Android MapRenderer
我已成功为Xamarin iOS创建了ViewRenderer,现在尝试为Android实现Renderer,这是我需要在Android中实现的Map:
public class MapViewModel : Map
{
public static readonly BindableProperty LocationsProperty = BindableProperty.Create<MapViewModel, List<Branch>>(x => x.Locations, new List<Branch>());
public static readonly BindableProperty PinTappedCommandProperty = BindableProperty.Create<MapViewModel, Command>(x => x.PinTapped, null);
public MapViewModel(List<Branch> locations)
{
Locations = locations;
PinTapped = new Command(async (x) =>
{
//await Navigation.PopModalAsync();
var info = new InformationView((Branch)x);
await Navigation.PushAsync(info);
});
}
public List<Branch> Locations
{
get { return (List<Branch>)GetValue(LocationsProperty); }
set { SetValue(LocationsProperty, value); }
}
public Command PinTapped
{
get {return (Command) GetValue(PinTappedCommandProperty); }
set {SetValue(PinTappedCommandProperty, value);}
}
}
按照我为iOS所做的操作,我为Android执行了以下操作:
[assembly: ExportRenderer (typeof (MapViewModel), typeof (MapViewAndroid))]
public class MapViewAndroid : ViewRenderer<MapViewModel, global::Android.Gms.Maps.MapView>
{
private global::Android.Gms.Maps.MapView NativeMap {get { return Control; } }
public MapViewAndroid ()
{
}
protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged (sender, e);
}
protected override void OnElementChanged (ElementChangedEventArgs<MapViewModel> e)
{
base.OnElementChanged(e);
var map = e.NewElement;
var cmd = map.PinTapped;
SetNativeControl(NativeMap);
}
}
Control为null,因此我无法正确设置SetNativeControl
,在应用程序输出中,我读到了: [art] JNI RegisterNativeMethods: attempt to register 0 native methods for kimo.customersapp.android.MapViewAndroid
作品?
Google地图可能需要一些时间才能初始化。 您需要等待它完全加载后才能使用它。 另外,请确保您已插入IOnMapReadyCallback,以便在准备使用地图时收到通知。
private GoogleMap NativeMap { get;set;}
protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged (sender, e);
if (e.PropertyName.Equals ("VisibleRegion")) {
var targetElement = (Android.Gms.Maps.MapView)Control;
if (NativeMap == null) {
targetElement.GetMapAsync (this);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.