Android Maps v2自定义标记在缩放时位置不正确

5

我知道之前已经讨论过这个问题,但实际上我找不到解决方案。

我正在为我的标记添加自定义图标:

markerUserLocation = mMap.addMarker(new
                        MarkerOptions().position(new
                                LatLng(point.latitude,
                                        point.longitude))
                                .anchor(0.5f, 1.0f)
                               .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_marker_my_location)));

问题是当缩放地图时,标记的位置会变得不正确。
我尝试过调整锚点值,但没有成功。默认的锚点不是图像的中下部吗? 我需要做什么才能确保标记底部在指定的坐标点上,而与缩放级别无关?
这里有一个ic_marker_my_location图标示例(xhdpi大小),因为我无法上传原始图标。 LE:这很傻,但如果我使用较小的标记图像...它就可以正常工作...所以也许标记资源图像大小存在问题?或者如果图像更大,我需要设置一些额外的参数?

你能把你的ic_marker_my_location.png文件添加到这个问题中吗? - MaciejGórski
我刚刚添加了一个相同大小的示例。 - Alin
我正在使用Open Street Maps,遇到了同样的问题,之前应用程序能够显示正确的当前位置,但现在它显示的位置好像超前了10公里! - TharakaNirmana
您在使用什么设备看到这个问题?您尝试用不同的设备进行测试了吗? - ddewaele
Nexus 7和Galaxy Nexus - Alin
5个回答

6

我最近遇到了类似的问题。在我看来,标记的setIcon(Bitmap bitmap)函数存在一个bug.

只要我改变标记的图像,锚点就会出现问题,因此我必须将其重置为默认位置。

marker.setIcon(bitmap);
marker.setAnchor(0.5f,1f);

我使用Play服务(8.4.0)解决了这个问题。


谢谢!自从几天前开始,我也遇到了同样的问题,但我对问题一无所知。你救了我的命! - Ton
是的,是的,是的,再说一千遍也是! - David Corsalini
这并没有解决我的问题,图标在不同的缩放级别下仍然显示不正确。 - Mark O'Sullivan

0

可能您实际上正在传递纬度和经度的浮点值。请像这样传递双精度值。

private double lat = 13.005039;
private double lng = 77.57734;


mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng));

0

我曾经遇到同样的问题,但是Mike T发布的锚点解决方案对我没有用。

对我有用的是将我的原始图像转换为矢量图(svg)。这样,当我放大或缩小地图时,就不会使我的自定义标记在地图上移动了。


0

我成功地通过制作一个新的标记 PNG 文件来解决了这个问题。基本上,我制作了一个与原图相同大小的新 PNG 文件,并重新创建了图像...现在它可以正常工作了。所以我真的不知道到底发生了什么,也许是地图控件不喜欢某些边距之类的东西。


-1
used this code

// Creating a marker
                MarkerOptions markerOptions = new MarkerOptions();

                // Getting a place from the places list
                HashMap<String, String> hmPlace = list.get(i);

                // Getting latitude of the place
                double lat = Double.parseDouble(hmPlace.get("lat"));                

                // Getting longitude of the place
                double lng = Double.parseDouble(hmPlace.get("lng"));

                // Getting name
                String name = hmPlace.get("place_name");

                // Getting vicinity
                String vicinity = hmPlace.get("vicinity");

                LatLng latLng = new LatLng(lat, lng);

                // Setting the position for the marker
                markerOptions.position(latLng);

                // Setting the title for the marker. 
                //This will be displayed on taping the marker
                markerOptions.title(name);
                markerOptions.snippet(vicinity);

                // Placing a marker on the touched position
                mGoogleMap.addMarker(markerOptions);            

什么是邻域? - Mark O'Sullivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接