Beispiel #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Mapsui.UI.Forms.MapView"/> class.
        /// </summary>
        public MapView()
        {
            MyLocationEnabled = false;
            MyLocationFollow  = false;

            IsClippedToBounds = true;

            _mapControl = new MapControl {
                UseDoubleTap = false
            };
            MyLocationLayer = new MyLocationLayer(this)
            {
                Enabled = true
            };
            _mapCalloutLayer = new MemoryLayer()
            {
                Name = CalloutLayerName, IsMapInfoLayer = true
            };
            _mapPinLayer = new MemoryLayer()
            {
                Name = PinLayerName, IsMapInfoLayer = true
            };
            _mapDrawableLayer = new MemoryLayer()
            {
                Name = DrawableLayerName, IsMapInfoLayer = true
            };

            // Get defaults from MapControl
            RotationLock = Map.RotationLock;
            ZoomLock     = Map.ZoomLock;
            PanLock      = Map.PanLock;

            // Add some events to _mapControl
            _mapControl.Viewport.ViewportChanged += HandlerViewportChanged;
            _mapControl.ViewportInitialized      += HandlerViewportInitialized;
            _mapControl.Info            += HandlerInfo;
            _mapControl.PropertyChanged += HandlerMapControlPropertyChanged;
            _mapControl.SingleTap       += HandlerTap;
            _mapControl.DoubleTap       += HandlerTap;
            _mapControl.LongTap         += HandlerLongTap;
            _mapControl.Hovered         += HandlerHovered;
            _mapControl.TouchStarted    += HandlerTouchStarted;
            _mapControl.TouchEnded      += HandlerTouchEnded;
            _mapControl.TouchEntered    += HandlerTouchEntered;
            _mapControl.TouchExited     += HandlerTouchExited;
            _mapControl.TouchMove       += HandlerTouchMove;
            _mapControl.TouchAction     += HandlerTouchAction;
            _mapControl.Swipe           += HandlerSwipe;
            _mapControl.Fling           += HandlerFling;
            _mapControl.Zoomed          += HandlerZoomed;

            _mapControl.TouchMove += (s, e) =>
            {
                Device.BeginInvokeOnMainThread(() => MyLocationFollow = false);
            };

            // Add MapView layers to Map
            AddLayers();

            // Add some events to _mapControl.Map.Layers
            _mapControl.Map.Layers.LayerAdded   += HandlerLayerChanged;
            _mapControl.Map.Layers.LayerMoved   += HandlerLayerChanged;
            _mapControl.Map.Layers.LayerRemoved += HandlerLayerChanged;

            AbsoluteLayout.SetLayoutBounds(_mapControl, new Rectangle(0, 0, 1, 1));
            AbsoluteLayout.SetLayoutFlags(_mapControl, AbsoluteLayoutFlags.All);

            _pictMyLocationNoCenter = new SKSvg().Load(Utilities.EmbeddedResourceLoader.Load("Images.LocationNoCenter.svg", typeof(MapView)));
            _pictMyLocationCenter   = new SKSvg().Load(Utilities.EmbeddedResourceLoader.Load("Images.LocationCenter.svg", typeof(MapView)));

            _mapZoomInButton = new SvgButton(Utilities.EmbeddedResourceLoader.Load("Images.ZoomIn.svg", typeof(MapView)))
            {
                BackgroundColor = Color.Transparent,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => { _mapControl.Navigator.ZoomIn(); })
            };

            _mapZoomOutButton = new SvgButton(Utilities.EmbeddedResourceLoader.Load("Images.ZoomOut.svg", typeof(MapView)))
            {
                BackgroundColor = Color.Transparent,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => { _mapControl.Navigator.ZoomOut(); }),
            };

            _mapSpacingButton1 = new Image {
                BackgroundColor = Color.Transparent, WidthRequest = 40, HeightRequest = 8, InputTransparent = true
            };

            _mapMyLocationButton = new SvgButton(_pictMyLocationNoCenter)
            {
                BackgroundColor = Color.Transparent,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => MyLocationFollow = true),
            };

            _mapSpacingButton2 = new Image {
                BackgroundColor = Color.Transparent, WidthRequest = 40, HeightRequest = 8, InputTransparent = true
            };

            _mapNorthingButton = new SvgButton(Utilities.EmbeddedResourceLoader.Load("Images.RotationZero.svg", typeof(MapView)))
            {
                BackgroundColor = Color.Transparent,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => Device.BeginInvokeOnMainThread(() => _mapControl.Navigator.RotateTo(0))),
            };

            _mapButtons = new StackLayout {
                BackgroundColor = Color.Transparent, Spacing = 0, IsVisible = true, InputTransparent = true, CascadeInputTransparent = false
            };

            _mapButtons.Children.Add(_mapZoomInButton);
            _mapButtons.Children.Add(_mapZoomOutButton);
            _mapButtons.Children.Add(_mapSpacingButton1);
            _mapButtons.Children.Add(_mapMyLocationButton);
            _mapButtons.Children.Add(_mapSpacingButton2);
            _mapButtons.Children.Add(_mapNorthingButton);

            if (Device.RuntimePlatform == Device.iOS)
            {
                // the buttons are placed a bit lower on iOS to avoid overlap with the transparent status bar
                AbsoluteLayout.SetLayoutBounds(_mapButtons, new Rectangle(0.95, 0.07, 40, 176));
            }
            else
            {
                AbsoluteLayout.SetLayoutBounds(_mapButtons, new Rectangle(0.95, 0.03, 40, 176));
            }

            AbsoluteLayout.SetLayoutFlags(_mapButtons, AbsoluteLayoutFlags.PositionProportional);

            Content = new AbsoluteLayout
            {
                Children =
                {
                    _mapControl,
                    _mapButtons,
                }
            };

            _pins.CollectionChanged     += HandlerPinsOnCollectionChanged;
            _drawable.CollectionChanged += HandlerDrawablesOnCollectionChanged;

            _mapCalloutLayer.DataSource = new ObservableCollectionProvider <Callout>(_callouts);
            _mapCalloutLayer.Style      = null; // We don't want a global style for this layer

            _mapPinLayer.DataSource = new ObservableCollectionProvider <Pin>(_pins);
            _mapPinLayer.Style      = null; // We don't want a global style for this layer

            _mapDrawableLayer.DataSource = new ObservableCollectionProvider <Drawable>(_drawable);
            _mapDrawableLayer.Style      = null; // We don't want a global style for this layer
        }
Beispiel #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Mapsui.UI.Forms.MapView"/> class.
        /// </summary>
        public MapView()
        {
            MyLocationEnabled = false;
            MyLocationFollow  = false;

            IsClippedToBounds = true;

            _mapControl = new MapControl {
                UseDoubleTap = false
            };
            _mapMyLocationLayer = new MyLocationLayer(this)
            {
                Enabled = true
            };
            _mapPinLayer = new MemoryLayer()
            {
                Name = PinLayerName, IsMapInfoLayer = true
            };
            _mapDrawableLayer = new MemoryLayer()
            {
                Name = DrawableLayerName, IsMapInfoLayer = true
            };

            // Get defaults from MapControl
            RotationLock = Map.RotationLock;
            ZoomLock     = Map.ZoomLock;
            PanLock      = Map.PanLock;

            // Add some events to _mapControl
            _mapControl.Viewport.ViewportChanged += HandlerViewportChanged;
            _mapControl.ViewportInitialized      += HandlerViewportInitialized;
            _mapControl.Info            += HandlerInfo;
            _mapControl.PropertyChanged += HandlerMapControlPropertyChanged;
            _mapControl.SingleTap       += HandlerTap;
            _mapControl.DoubleTap       += HandlerTap;
            _mapControl.LongTap         += HandlerLongTap;
            _mapControl.Hovered         += HandlerHover;
            _mapControl.TouchMove       += (s, e) =>
            {
                Device.BeginInvokeOnMainThread(() => MyLocationFollow = false);
            };

            AbsoluteLayout.SetLayoutBounds(_mapControl, new Rectangle(0, 0, 1, 1));
            AbsoluteLayout.SetLayoutFlags(_mapControl, AbsoluteLayoutFlags.All);

            _pictMyLocationNoCenter = new SkiaSharp.Extended.Svg.SKSvg().Load(Utilities.EmbeddedResourceLoader.Load("Images.LocationNoCenter.svg", typeof(MapView)));
            _pictMyLocationCenter   = new SkiaSharp.Extended.Svg.SKSvg().Load(Utilities.EmbeddedResourceLoader.Load("Images.LocationCenter.svg", typeof(MapView)));

            _mapZoomInButton = new SvgButton(Utilities.EmbeddedResourceLoader.Load("Images.ZoomIn.svg", typeof(MapView)))
            {
                BackgroundColor = Color.White,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => { _mapControl.Navigator.ZoomIn(); Refresh(); })
            };

            _mapZoomOutButton = new SvgButton(Utilities.EmbeddedResourceLoader.Load("Images.ZoomOut.svg", typeof(MapView)))
            {
                BackgroundColor = Color.White,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => { _mapControl.Navigator.ZoomOut(); Refresh(); }),
            };

            _mapSpacingButton1 = new Image {
                BackgroundColor = Color.Transparent, WidthRequest = 40, HeightRequest = 8
            };

            _mapMyLocationButton = new SvgButton(_pictMyLocationNoCenter)
            {
                BackgroundColor = Color.White,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => MyLocationFollow = !MyLocationFollow),
            };

            _mapSpacingButton2 = new Image {
                BackgroundColor = Color.Transparent, WidthRequest = 40, HeightRequest = 8
            };

            _mapNorthingButton = new SvgButton(Utilities.EmbeddedResourceLoader.Load("Images.RotationZero.svg", typeof(MapView)))
            {
                BackgroundColor = Color.White,
                WidthRequest    = 40,
                HeightRequest   = 40,
                Command         = new Command(obj => Device.BeginInvokeOnMainThread(() => _mapControl.Navigator.RotateTo(0))),
            };

            _mapButtons = new StackLayout {
                BackgroundColor = Color.Transparent, Opacity = 0.8, Spacing = 0, IsVisible = true
            };

            _mapButtons.Children.Add(_mapZoomInButton);
            _mapButtons.Children.Add(_mapZoomOutButton);
            _mapButtons.Children.Add(_mapSpacingButton1);
            _mapButtons.Children.Add(_mapMyLocationButton);
            _mapButtons.Children.Add(_mapSpacingButton2);
            _mapButtons.Children.Add(_mapNorthingButton);

            AbsoluteLayout.SetLayoutBounds(_mapButtons, new Rectangle(0.95, 0.03, 40, 176));
            AbsoluteLayout.SetLayoutFlags(_mapButtons, AbsoluteLayoutFlags.PositionProportional);

            Content = new AbsoluteLayout
            {
                Children =
                {
                    _mapControl,
                    _mapButtons,
                }
            };

            _pins.CollectionChanged     += HandlerPinsOnCollectionChanged;
            _drawable.CollectionChanged += HandlerDrawablesOnCollectionChanged;

            _mapPinLayer.DataSource = new ObservableCollectionProvider <Pin>(_pins);
            _mapPinLayer.Style      = null; // We don't want a global style for this layer

            _mapDrawableLayer.DataSource = new ObservableCollectionProvider <Drawable>(_drawable);
            _mapDrawableLayer.Style      = null; // We don't want a global style for this layer
        }
Beispiel #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Mapsui.UI.Forms.MapView"/> class.
        /// </summary>
        public MapView()
        {
            MyLocationFollow = false;

            IsClippedToBounds = true;
            UseDoubleTap      = false;

            MyLocationLayer = new MyLocationLayer(this)
            {
                Enabled = true
            };
            _mapCalloutLayer = new MemoryLayer()
            {
                Name = CalloutLayerName, IsMapInfoLayer = true
            };
            _mapPinLayer = new MemoryLayer()
            {
                Name = PinLayerName, IsMapInfoLayer = true
            };
            _mapDrawableLayer = new MemoryLayer()
            {
                Name = DrawableLayerName, IsMapInfoLayer = true
            };

            // Get defaults from MapControl
            RotationLock = Map?.RotationLock ?? false;
            ZoomLock     = Map?.ZoomLock ?? true;
            PanLock      = Map?.PanLock ?? false;

            // Add some events to _mapControl
            Viewport.ViewportChanged += HandlerViewportChanged;
            Info        += HandlerInfo;
            SingleTap   += HandlerTap;
            DoubleTap   += HandlerTap;
            LongTap     += HandlerLongTap;
            SizeChanged += HandlerSizeChanged;

            TouchMove += (s, e) => {
                RunOnUIThread(() => MyLocationFollow = false);
            };

            // Add MapView layers to Map
            AddLayers();

            // Add some events to _mapControl.Map.Layers
            Map !.Layers.Changed += HandleLayersChanged;

            _pictMyLocationNoCenter = EmbeddedResourceLoader.Load("Images.LocationNoCenter.svg", typeof(MapView)).LoadSvgPicture() ?? throw new MissingManifestResourceException("Images.LocationNoCenter.svg");
            _pictMyLocationCenter   = EmbeddedResourceLoader.Load("Images.LocationCenter.svg", typeof(MapView)).LoadSvgPicture() ?? throw new MissingManifestResourceException("Images.LocationCenter.svg");;

            _pictZoomIn   = EmbeddedResourceLoader.Load("Images.ZoomIn.svg", typeof(MapView)).LoadSvgPicture() ?? throw new MissingManifestResourceException("Images.ZoomIn.svg");;
            _pictZoomOut  = EmbeddedResourceLoader.Load("Images.ZoomOut.svg", typeof(MapView)).LoadSvgPicture() ?? throw new MissingManifestResourceException("Images.ZoomOut.svg");;
            _pictNorthing = EmbeddedResourceLoader.Load("Images.RotationZero.svg", typeof(MapView)).LoadSvgPicture() ?? throw new MissingManifestResourceException("Images.RotationZero.svg");;
            CreateButtons();

            _pins.CollectionChanged     += HandlerPinsOnCollectionChanged;
            _drawable.CollectionChanged += HandlerDrawablesOnCollectionChanged;

            _mapCalloutLayer.DataSource = new ObservableCollectionProvider <Callout, IFeature>(_callouts);
            _mapCalloutLayer.Style      = null; // We don't want a global style for this layer

            _mapPinLayer.DataSource = new ObservableCollectionProvider <Pin, IFeature>(_pins);
            _mapPinLayer.Style      = null; // We don't want a global style for this layer

            _mapDrawableLayer.DataSource = new ObservableCollectionProvider <Drawable, IFeature>(_drawable);
            _mapDrawableLayer.Style      = null; // We don't want a global style for this layer
        }