void OnMapReady(GoogleMap map) { if (map != null) { map.SetOnCameraChangeListener(this); map.SetOnMapClickListener(this); map.SetOnMapLongClickListener(this); map.SetOnMyLocationButtonClickListener(this); _uiSettingsLogic.Initialize(); UpdateIsShowingUser(); UpdateHasScrollEnabled(); UpdateHasZoomEnabled(); UpdateHasRotationEnabled(); UpdateIsTrafficEnabled(); UpdateIndoorEnabled(); UpdateMapStyle(); SetMapType(); SetPadding(); } foreach (var logic in _logics) { logic.Register(_oldNativeMap, _oldMap, NativeMap, Map); } _clusterLogic.Register(_oldNativeMap, _oldMap, NativeMap, Map); _clusterLogic.RestoreItems(); _clusterLogic.OnMapPropertyChanged(new PropertyChangedEventArgs(Map.SelectedPinProperty.PropertyName)); if (this.Map.PendingClusterRequest) { this._clusterLogic.HandleClusterRequest(); } _ready = true; if (_ready && _onLayout) { InitializeLogic(); } }
protected override void OnElementChanged(ElementChangedEventArgs <View> e) { base.OnElementChanged(e); // For XAML Previewer or FormsGoogleMaps.Init not called. if (!FormsGoogleMaps.IsInitialized) { var label = new UILabel() { Text = "Xamarin.Forms.GoogleMaps", BackgroundColor = Xamarin.Forms.Color.Teal.ToUIColor(), TextColor = Xamarin.Forms.Color.Black.ToUIColor(), TextAlignment = UITextAlignment.Center }; SetNativeControl(label); return; } var oldMapView = (MapView)Control; if (e.OldElement != null) { var oldMapModel = (Map)e.OldElement; oldMapModel.OnSnapshot -= OnSnapshot; _cameraLogic.Unregister(); if (oldMapView != null) { oldMapView.CoordinateLongPressed -= CoordinateLongPressed; oldMapView.CoordinateTapped -= CoordinateTapped; oldMapView.CameraPositionChanged -= CameraPositionChanged; oldMapView.DidTapMyLocationButton = null; } } if (e.NewElement != null) { var mapModel = (Map)e.NewElement; if (Control == null) { SetNativeControl(new MapView(RectangleF.Empty)); var mkMapView = (MapView)Control; mkMapView.CameraPositionChanged += CameraPositionChanged; mkMapView.CoordinateTapped += CoordinateTapped; mkMapView.CoordinateLongPressed += CoordinateLongPressed; mkMapView.DidTapMyLocationButton = DidTapMyLocation; } _cameraLogic.Register(Map, NativeMap); Map.OnSnapshot += OnSnapshot; //_cameraLogic.MoveCamera(mapModel.InitialCameraUpdate); //_ready = true; _uiSettingsLogic.Register(Map, NativeMap); UpdateMapType(); UpdateIsShowingUser(_uiSettingsLogic.MyLocationButtonEnabled); UpdateHasScrollEnabled(_uiSettingsLogic.ScrollGesturesEnabled); UpdateHasZoomEnabled(_uiSettingsLogic.ZoomGesturesEnabled); UpdateHasRotationEnabled(_uiSettingsLogic.RotateGesturesEnabled); UpdateIsTrafficEnabled(); UpdatePadding(); UpdateMapStyle(); //SetMaxZoom(); UpdateMyLocationEnabled(); _uiSettingsLogic.Initialize(); foreach (var logic in _logics) { logic.Register(oldMapView, (Map)e.OldElement, NativeMap, Map); logic.RestoreItems(); logic.OnMapPropertyChanged(new PropertyChangedEventArgs(Map.SelectedPinProperty.PropertyName)); } if (Map.IsUseCluster) { _clusterLogic.Register(oldMapView, (Map)e.OldElement, NativeMap, Map); _clusterLogic.RestoreItems(); _clusterLogic.OnMapPropertyChanged(new PropertyChangedEventArgs(Map.SelectedPinProperty.PropertyName)); } } }