Xamarin表单上的自定义地图引脚



我正在阅读Xamarin的文章,该文章描述了如何使用中的图像自定义引脚

protected override MarkerOptions CreateMarker(Pin pin)
{
var marker = new MarkerOptions();
marker.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude));
marker.SetTitle(pin.Label);
marker.SetSnippet(pin.Address);
marker.SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.pin));
return marker;
}

我在resources/drawable中有一个png图像。但是,地图上没有显示任何接点。我在自定义渲染器中放置了一个断点,它就会命中,这样我就知道它被调用了。以下是实现自定义映射的页面代码:

Xaml

<controls:CustomMap MapType="Street" x:Name="map" WidthRequest="150"  IsVisible="True" HasZoomEnabled="True" HasScrollEnabled="True">
<controls:CustomMap.HeightRequest>
<OnIdiom>
<OnIdiom.Phone>
<OnPlatform
iOS="250"
Android="150" />
</OnIdiom.Phone>
</OnIdiom>
</controls:CustomMap.HeightRequest>
</controls:CustomMap>

以及背后的代码

var position = new Xamarin.Forms.Maps.Position(item.Latitude.Value, item.Longitude.Value); // Latitude, Longitude
var pin = new CustomPin
{
Type = PinType.Place,
Position = position,
Label = item.Name,
Address = item.AddressString
};
pin.Clicked += async (sender, e) =>
{
await Navigation.PushAsync(new RestaurantDetails(item));
};
Device.BeginInvokeOnMainThread(() =>
{
map.Pins.Add(pin);
map.CustomPins.Add(pin);
// map.MoveToRegion(MapSpan.FromCenterAndRadius(position, Distance.FromMiles(0.3)));
});

解决了这个问题,没有将图像也放在可绘制的xxxx文件夹中。啊!

对我来说,问题是我将CustomPins添加到的CustomMap类没有引发CreateMarker重写的方法。

这可能有助于其他人知道,如果您将CustomPin对象添加到CustomPin集合,则您可能会看到相同的问题,即Pin不会出现在CustomMap上。我能够通过将它们中的每一个添加到Pins集合来解决这个问题。

最新更新