diff options
-rw-r--r-- | Xamarin.Forms.Maps.Android/MapRenderer.cs | 48 | ||||
-rw-r--r-- | Xamarin.Forms.Maps.iOS/MapRenderer.cs | 16 | ||||
-rw-r--r-- | Xamarin.Forms.Maps/Pin.cs | 19 | ||||
-rw-r--r-- | docs/Xamarin.Forms.Maps/Xamarin.Forms.Maps/Pin.xml | 19 |
4 files changed, 65 insertions, 37 deletions
diff --git a/Xamarin.Forms.Maps.Android/MapRenderer.cs b/Xamarin.Forms.Maps.Android/MapRenderer.cs index 5856dc78..0b426d3e 100644 --- a/Xamarin.Forms.Maps.Android/MapRenderer.cs +++ b/Xamarin.Forms.Maps.Android/MapRenderer.cs @@ -181,6 +181,33 @@ namespace Xamarin.Forms.Maps.Android MoveToRegion(Element.LastMoveToRegion, false); } } + + protected virtual void OnMapReady(GoogleMap map) + { + if (map == null) + { + return; + } + + map.SetOnCameraChangeListener(this); + map.InfoWindowClick += MapOnMarkerClick; + + map.UiSettings.ZoomControlsEnabled = Map.HasZoomEnabled; + map.UiSettings.ZoomGesturesEnabled = Map.HasZoomEnabled; + map.UiSettings.ScrollGesturesEnabled = Map.HasScrollEnabled; + map.MyLocationEnabled = map.UiSettings.MyLocationButtonEnabled = Map.IsShowingUser; + SetMapType(); + } + + protected virtual MarkerOptions CreateMarker(Pin pin) + { + var opts = new MarkerOptions(); + opts.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude)); + opts.SetTitle(pin.Label); + opts.SetSnippet(pin.Address); + + return opts; + } void AddPins(IList pins) { @@ -198,10 +225,7 @@ namespace Xamarin.Forms.Maps.Android _markers.AddRange(pins.Cast<Pin>().Select(p => { Pin pin = p; - var opts = new MarkerOptions(); - opts.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude)); - opts.SetTitle(pin.Label); - opts.SetSnippet(pin.Address); + var opts = CreateMarker(pin); var marker = map.AddMarker(opts); // associate pin with marker for later lookup in event handlers @@ -367,19 +391,7 @@ namespace Xamarin.Forms.Maps.Android void IOnMapReadyCallback.OnMapReady(GoogleMap map) { NativeMap = map; - if (map == null) - { - return; - } - - map.SetOnCameraChangeListener(this); - map.InfoWindowClick += MapOnMarkerClick; - - map.UiSettings.ZoomControlsEnabled = Map.HasZoomEnabled; - map.UiSettings.ZoomGesturesEnabled = Map.HasZoomEnabled; - map.UiSettings.ScrollGesturesEnabled = Map.HasScrollEnabled; - map.MyLocationEnabled = map.UiSettings.MyLocationButtonEnabled = Map.IsShowingUser; - SetMapType(); + OnMapReady(map); } } -}
\ No newline at end of file +} diff --git a/Xamarin.Forms.Maps.iOS/MapRenderer.cs b/Xamarin.Forms.Maps.iOS/MapRenderer.cs index 44d95aa6..2fac61a8 100644 --- a/Xamarin.Forms.Maps.iOS/MapRenderer.cs +++ b/Xamarin.Forms.Maps.iOS/MapRenderer.cs @@ -306,6 +306,16 @@ namespace Xamarin.Forms.Maps.MacOS } #endif + protected virtual IMKAnnotation CreateAnnotation(Pin pin) + { + return new MKPointAnnotation + { + Title = pin.Label, + Subtitle = pin.Address ?? "", + Coordinate = new CLLocationCoordinate2D(pin.Position.Latitude, pin.Position.Longitude) + }; + } + void UpdateRegion() { if (_shouldUpdateRegion) @@ -319,10 +329,8 @@ namespace Xamarin.Forms.Maps.MacOS { foreach (Pin pin in pins) { - var annotation = new MKPointAnnotation { Title = pin.Label, Subtitle = pin.Address ?? "" }; - + var annotation = CreateAnnotation(pin); pin.Id = annotation; - annotation.SetCoordinate(new CLLocationCoordinate2D(pin.Position.Latitude, pin.Position.Longitude)); ((MKMapView)Control).AddAnnotation(annotation); } } @@ -414,4 +422,4 @@ namespace Xamarin.Forms.Maps.MacOS } } } -}
\ No newline at end of file +} diff --git a/Xamarin.Forms.Maps/Pin.cs b/Xamarin.Forms.Maps/Pin.cs index 6c0fb556..912c30e8 100644 --- a/Xamarin.Forms.Maps/Pin.cs +++ b/Xamarin.Forms.Maps/Pin.cs @@ -2,7 +2,7 @@ namespace Xamarin.Forms.Maps { - public sealed class Pin : BindableObject + public class Pin : BindableObject { public static readonly BindableProperty TypeProperty = BindableProperty.Create("Type", typeof(PinType), typeof(Pin), default(PinType)); @@ -10,9 +10,7 @@ namespace Xamarin.Forms.Maps public static readonly BindableProperty AddressProperty = BindableProperty.Create("Address", typeof(string), typeof(Pin), default(string)); - // introduced to store the unique id for Android markers - - string _label; + public static readonly BindableProperty LabelProperty = BindableProperty.Create("Label", typeof(string), typeof(Pin), default(string)); public string Address { @@ -22,14 +20,8 @@ namespace Xamarin.Forms.Maps public string Label { - get { return _label; } - set - { - if (_label == value) - return; - _label = value; - OnPropertyChanged(); - } + get { return (string)GetValue(LabelProperty); } + set { SetValue(LabelProperty, value); } } public Position Position @@ -44,6 +36,7 @@ namespace Xamarin.Forms.Maps set { SetValue(TypeProperty, value); } } + // introduced to store the unique id for Android markers internal object Id { get; set; } public event EventHandler Clicked; @@ -96,4 +89,4 @@ namespace Xamarin.Forms.Maps return string.Equals(Label, other.Label) && Equals(Position, other.Position) && Type == other.Type && string.Equals(Address, other.Address); } } -}
\ No newline at end of file +} diff --git a/docs/Xamarin.Forms.Maps/Xamarin.Forms.Maps/Pin.xml b/docs/Xamarin.Forms.Maps/Xamarin.Forms.Maps/Pin.xml index 3280b0bb..753dd877 100644 --- a/docs/Xamarin.Forms.Maps/Xamarin.Forms.Maps/Pin.xml +++ b/docs/Xamarin.Forms.Maps/Xamarin.Forms.Maps/Pin.xml @@ -1,6 +1,6 @@ <Type Name="Pin" FullName="Xamarin.Forms.Maps.Pin"> - <TypeSignature Language="C#" Value="public sealed class Pin : Xamarin.Forms.BindableObject" /> - <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed beforefieldinit Pin extends Xamarin.Forms.BindableObject" /> + <TypeSignature Language="C#" Value="public class Pin : Xamarin.Forms.BindableObject" /> + <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit Pin extends Xamarin.Forms.BindableObject" /> <AssemblyInfo> <AssemblyName>Xamarin.Forms.Maps</AssemblyName> <AssemblyVersion>1.0.0.0</AssemblyVersion> @@ -191,6 +191,21 @@ public static Page GetMapPage () <remarks>To be added.</remarks> </Docs> </Member> + <Member MemberName="LabelProperty"> + <MemberSignature Language="C#" Value="public static readonly Xamarin.Forms.BindableProperty LabelProperty;" /> + <MemberSignature Language="ILAsm" Value=".field public static initonly class Xamarin.Forms.BindableProperty LabelProperty" /> + <MemberType>Field</MemberType> + <AssemblyInfo> + <AssemblyVersion>2.0.0.0</AssemblyVersion> + </AssemblyInfo> + <ReturnValue> + <ReturnType>Xamarin.Forms.BindableProperty</ReturnType> + </ReturnValue> + <Docs> + <summary>To be added.</summary> + <remarks>To be added.</remarks> + </Docs> + </Member> <Member MemberName="op_Equality"> <MemberSignature Language="C#" Value="public static bool op_Equality (Xamarin.Forms.Maps.Pin left, Xamarin.Forms.Maps.Pin right);" /> <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname bool op_Equality(class Xamarin.Forms.Maps.Pin left, class Xamarin.Forms.Maps.Pin right) cil managed" /> |