Mapbox自定义标记锚点和缩放问题

时间:2016-11-28 19:00:36

标签: android xamarin.android mapbox

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中解决了锚定问题。

1 个答案:

答案 0 :(得分:0)

感谢详细的写作,而Mapbox并不直接支持Xamarin组件,我能够在这个SO问题中重现这个问题。如果Xamarin有这个,你可以尝试更新到4.2.0-beta.5。 MarkerOptions不应该有任何锚定问题,但你必须在图标的底部添加填充(锚定居中)。