private void OnMapReady(GoogleMap nativeMap, Map map) { if (nativeMap != null) { _cameraLogic.Register(map, nativeMap); _uiSettingsLogic.Register(map, nativeMap); Map.OnSnapshot += OnSnapshot; nativeMap.SetOnMapClickListener(this); nativeMap.SetOnMapLongClickListener(this); nativeMap.SetOnMyLocationButtonClickListener(this); UpdateIsShowingUser(_uiSettingsLogic.MyLocationButtonEnabled); UpdateHasScrollEnabled(_uiSettingsLogic.ScrollGesturesEnabled); UpdateHasZoomEnabled(_uiSettingsLogic.ZoomControlsEnabled, _uiSettingsLogic.ZoomGesturesEnabled); UpdateHasRotationEnabled(_uiSettingsLogic.RotateGesturesEnabled); UpdateIsTrafficEnabled(); UpdateIndoorEnabled(); UpdateMapStyle(); UpdateMyLocationEnabled(); _uiSettingsLogic.Initialize(); SetMapType(); SetPadding(); } _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 = Color.Teal.ToUIColor(), TextColor = Color.Black.ToUIColor(), TextAlignment = UITextAlignment.Center }; SetNativeControl(label); return; } var oldMapView = (MapView)Control; if (e.OldElement != null) { _cameraLogic.Unregister(); } 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); if (mapModel.LastMoveToRegion != null) { _cameraLogic.MoveToRegion(mapModel.LastMoveToRegion, false); } UpdateMapType(); UpdateIsShowingUser(); UpdateHasScrollEnabled(); UpdateHasZoomEnabled(); UpdateIsTrafficEnabled(); foreach (var logic in _logics) { logic.Register(oldMapView, (Map)e.OldElement, NativeMap, Map); logic.RestoreItems(); logic.OnMapPropertyChanged(new PropertyChangedEventArgs(Map.SelectedPinProperty.PropertyName)); } } }
protected override async void OnElementChanged(ElementChangedEventArgs <Map> e) { base.OnElementChanged(e); var oldMapView = (MapControl)Control; if (e.OldElement != null) { var mapModel = e.OldElement; mapModel.OnSnapshot -= OnSnapshot; _cameraLogic.Unregister(); _uiSettingsLogic.Unregister(); if (oldMapView != null) { oldMapView.ActualCameraChanged -= OnActualCameraChanged; oldMapView.ZoomLevelChanged -= OnZoomLevelChanged; oldMapView.CenterChanged -= Control_CenterChanged; } } if (e.NewElement != null) { var mapModel = e.NewElement; if (Control == null) { SetNativeControl(new MapControl()); Control.MapServiceToken = FormsGoogleMaps.AuthenticationToken; Control.TrafficFlowVisible = Map.IsTrafficEnabled; Control.ZoomLevelChanged += OnZoomLevelChanged; Control.CenterChanged += Control_CenterChanged; Control.ActualCameraChanged += OnActualCameraChanged; } _cameraLogic.Register(Map, NativeMap); Map.OnSnapshot += OnSnapshot; _uiSettingsLogic.Register(Map, NativeMap); _uiSettingsLogic.Initialize(); UpdateMapType(); UpdateHasScrollEnabled(); UpdateHasZoomEnabled(); UpdateHasRotationEnabled(); await UpdateIsShowingUser(Element.MyLocationEnabled); foreach (var logic in _logics) { logic.Register(oldMapView, e.OldElement, NativeMap, Map); logic.RestoreItems(); logic.OnMapPropertyChanged(new PropertyChangedEventArgs(Map.SelectedPinProperty.PropertyName)); } } }
protected override async void OnElementChanged(ElementChangedEventArgs <View> e) { base.OnElementChanged(e); // For XAML Previewer or FormsGoogleMaps.Init not called. if (!FormsGoogleMaps.IsInitialized) { var tv = new TextView(Context) { Gravity = GravityFlags.Center, Text = "Xamarin.Forms.GoogleMaps" }; tv.SetBackgroundColor(Color.Teal.ToAndroid()); tv.SetTextColor(Color.Black.ToAndroid()); SetNativeControl(tv); return; } var oldMapView = (MapView)Control; var mapView = new MapView(Context); mapView.OnCreate(s_bundle); mapView.OnResume(); SetNativeControl(mapView); var activity = Context as Activity; if (activity != null) { var metrics = new DisplayMetrics(); activity.WindowManager.DefaultDisplay.GetMetrics(metrics); foreach (var logic in _logics) { logic.ScaledDensity = metrics.ScaledDensity; } _cameraLogic.ScaledDensity = metrics.ScaledDensity; } if (e.OldElement != null) { var oldMapModel = (Map)e.OldElement; _cameraLogic.Unregister(); var oldGoogleMap = await oldMapView.GetGoogleMapAsync(); if (oldGoogleMap != null) { oldGoogleMap.SetOnCameraChangeListener(null); oldGoogleMap.SetOnMapClickListener(null); oldGoogleMap.SetOnMapLongClickListener(null); oldGoogleMap.SetOnMyLocationButtonClickListener(null); } oldMapView.Dispose(); } if (oldMapView != null) { _oldNativeMap = await oldMapView.GetGoogleMapAsync(); _oldMap = (Map)e.OldElement; } NativeMap = await((MapView)Control).GetGoogleMapAsync(); _cameraLogic.Register(Map, NativeMap); OnMapReady(NativeMap); }
protected override void OnElementChanged(ElementChangedEventArgs <View> e) { base.OnElementChanged(e); // For XAML Previewer or GoogleMapsSystem.Init not called. if (!GoogleMapsSystem.IsInitialized) { var label = new UILabel() { Text = "RedCorners.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 = (MapBase)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 = (MapBase)e.NewElement; if (Control == null) { SetNativeControl(new MapView(CoreGraphics.CGRect.Empty)); var mkMapView = (MapView)Control; mkMapView.CameraPositionChanged += CameraPositionChanged; mkMapView.CoordinateTapped += CoordinateTapped; mkMapView.CoordinateLongPressed += CoordinateLongPressed; mkMapView.DidTapMyLocationButton = DidTapMyLocation; InvokeOnMainThread(() => mkMapView.AddObserver(this, new NSString("myLocation"), NSKeyValueObservingOptions.New, IntPtr.Zero)); } _cameraLogic.Register(Map, NativeMap); Map.OnSnapshot += OnSnapshot; //_cameraLogic.MoveCamera(mapModel.InitialCameraUpdate); //_ready = true; _uiSettingsLogic.Register(Map, NativeMap); UpdateMapType(); UpdateHasScrollEnabled(_uiSettingsLogic.ScrollGesturesEnabled); UpdateHasZoomEnabled(_uiSettingsLogic.ZoomGesturesEnabled); UpdateHasRotationEnabled(_uiSettingsLogic.RotateGesturesEnabled); UpdateIsTrafficEnabled(); UpdatePadding(); UpdateMapStyle(); UpdateMyLocationEnabled(); _uiSettingsLogic.Initialize(); foreach (var logic in Logics) { logic.Register(oldMapView, (MapBase)e.OldElement, NativeMap, Map); logic.RestoreItems(); logic.OnMapPropertyChanged(new PropertyChangedEventArgs(MapBase.SelectedPinProperty.PropertyName)); } } }
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 = Color.Teal.ToUIColor(), TextColor = 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.PoiWithPlaceIdTapped -= PoiTapped; 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.PoiWithPlaceIdTapped += PoiTapped; 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(); 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)); } } }