MapBox Android SDK v4.1.1.1通过Xamarin组件(https://components.xamarin.com/view/mapboxsdk/)
我正在使用上面提供的Xamarin组件提供的示例测试平台,并尝试使用mapbox Marker类将drawable设置为标记Icon。在运行时,标记锚定似乎默认设置为顶部/左侧,这导致标记在任何放大期间在地图西南方向移动,在缩小时移动到东北方向。如果我删除了Icon的设置,则使用默认图标,并在任何缩放和旋转手势期间正确定位。
任何人都可以对此行为及其解决方法提供任何见解吗?
示例代码:
protected override async void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
mapView = FindViewById<MapView> (Resource.Id.mapview);
mapView.AccessToken = GetString (Resource.String.mapboxAccessToken);
mapView.StyleUrl = Mapbox.Constants.Style.MapboxStreets;
mapView.OnCreate (bundle);
// Get the map instance
map = await mapView.GetMapAsync ();
map.UiSettings.ZoomControlsEnabled = true;
//Removed code for click events
map.AddMarker (new MarkerOptions ()
.SetTitle ("Test Marker")
.SetPosition (new LatLng (41.885, -87.679))
//This is the only change made from the provided sample code - for setting the icon
.SetIcon(IconFactory.GetInstance(this).FromResource(Resource.Drawable.Driver_Pin)
//This is the only change made from the provided sample code - for setting the icon
);
var position = new CameraPosition.Builder ()
.Target (new LatLng (41.885, -87.679)) // Sets the new camera position
.Zoom (11) // Sets the zoom
.Build (); // Creates a CameraPosition from the builder
map.AnimateCamera (CameraUpdateFactory.NewCameraPosition (position), 3000);
}
我切换到使用Mapbox MarkerView类来访问SetAnchor()方法,但无论我使用什么值,它都不会对问题产生任何影响。
map.AddMarker (new MarkerViewOptions ()
.SetTitle ("Test Marker")
.SetPosition (new LatLng (41.885, -87.679))
.SetAnchor(0.5f, 1.0f) // this should be bottom center
.SetIcon(IconFactory.GetInstance(this).FromResource(Resource.Drawable.Driver_Pin))
);
我使用的图标是一个简单的方形PNG,没有填充,地图上的预期点位于图标的底部中心。
此外,如果我启用内置缩放按钮(通过UISettings),那么放大和缩小似乎也有一个上/左偏置,这意味着不是放大到可见地图的中心点,而是放大似乎集中在它西南方的一个点上。
此SO帖Drawable icons on route not pinned at base似乎与我看到的问题有关,OP的最终评论表明自定义标记图标和锚定仍然存在问题,即使参考了在v4.1.1中解决了锚定问题。
答案 0 :(得分:0)
感谢详细的写作,而Mapbox并不直接支持Xamarin组件,我能够在这个SO问题中重现这个问题。如果Xamarin有这个,你可以尝试更新到4.2.0-beta.5。 MarkerOptions不应该有任何锚定问题,但你将必须在图标的底部添加填充(锚定居中)。