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

时间:2013-06-27 08:29:44

标签: android marker android-maps-v2

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

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

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大小),因为我无法上传原始图标。 enter image description here

LE:这真的很傻,但是如果我使用较小的标记图像......它可以正常工作......那么标记资源图像大小可能存在错误?或者如果图像更大,我需要设置一些额外的参数吗?

5 个答案:

答案 0 :(得分:5)

我最近遇到了类似的问题。在我看来,标记的setIcon(位图位图)功能存在错误。

一旦我更改了标记的图像,锚就会搞砸,所以我不得不再次将其重置为默认位置。

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

使用播放服务(8.4.0)

对我有用

答案 1 :(得分:0)

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

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


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

答案 2 :(得分:0)

我设法通过制作新的标记png来解决问题。基本上制作了相同尺寸的新png并重新创建了图像......现在它可以工作了。所以我不知道究竟发生了什么,也许地图控件不喜欢某些边缘或其他东西。

答案 3 :(得分:0)

我遇到了同样的问题,但是Mike T发布的锚点解决方案并不适用于我。

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

答案 4 :(得分:-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);