使用谷歌地图Android API v2缩放时标记会移动

使用谷歌地图Android API v2缩放时标记会移动,android,google-maps-markers,google-maps-android-api-2,Android,Google Maps Markers,Google Maps Android Api 2,当使用Google Maps Android API v2在地图上添加一些标记时,标记没有设置到正确的位置,并且在缩放时移动 放大时,它们会更接近正确的位置,就好像它们被与缩放相关的因子平移一样 怎么了 放大示例: 碎片 公共类CenterMapFragment扩展了片段{ 私有谷歌地图; 私人名单; @凌驾 CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){ 返回充气机。充气(右布局图、中心图、容器、假); } @凌驾 已创建ActivityState上的公共无

当使用Google Maps Android API v2在地图上添加一些标记时,标记没有设置到正确的位置,并且在缩放时移动

放大时,它们会更接近正确的位置,就好像它们被与缩放相关的因子平移一样

怎么了

放大示例:

碎片

公共类CenterMapFragment扩展了片段{
私有谷歌地图;
私人名单;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(右布局图、中心图、容器、假);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mMap=((SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
如果(mMap!=null){
mCenterList=MyApplication.dbHelper.getAllCenter();
用于(中心:mCenterList){
mMap.addMarker(新标记选项().position(新LatLng(center.lat,center.lng)).icon(位图描述符工厂
.fromResource(R.drawable.myicon));
}
}
}
}
布局


对于自定义标记,您还需要使用

MarkerOptions.anchor(浮动u、浮动v)


它描述了标记上的指针点的位置。默认情况下,此点位于图像的中间底部。

要显示窗口信息,必须在“mMap”上使用setInfoWindowAdapter或为标记设置标题


关于图标,当您缩小时,它似乎在移动,但锚点始终指向地图上的同一位置。如果你正在使用的图像没有遵循谷歌的图标模式(锚定在图像底部的中间),你可以设置一个锚定。为此,您必须使用

BitmapDescriptor没有方法锚。这是一个标记选项,它是:“图像上的点,将放置在标记的LatLng位置。这默认为图像底部的中间。”。它不应该修改位置。@jul很抱歉,的确-这是
标记选项的一种方法。不管怎样,这就是你要找的。“它不应该修改位置”-意味着图像的位置不会影响地图上的实际纬度和经度。它只是将图像从u*100%向右平移,从v*100%向上平移。@jul另外,如果您提供问题的屏幕截图,可能会有所帮助。我添加了图片。我刚刚尝试使用默认标记,它工作正常。正如@jul提到的-
anchor
是一种
MarkerOptions
方法。我只是忘了)现在当你添加截图时,我可以说问题肯定出在主持人身上。你的图标上有空白吗?相同的问题有解决方案吗?@UsmanGhauri是的,被接受的那个。@jul:对我不起作用。我试着加了锚,但它的定位还是有点偏离。我尝试了这些,但仍然没有运气。im使用svg图标作为位置pin
public class CenterMapFragment extends Fragment {

    private GoogleMap mMap;
    private List<Center> mCenterList;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.center_map_fragment, container, false);
    }

    @Override
    public void onActivityCreated (Bundle savedInstanceState){

        super.onActivityCreated(savedInstanceState); 

        mMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();

        if (mMap != null) {

            mCenterList = MyApplication.dbHelper.getAllCenter();

            for(Center center : mCenterList){

                mMap.addMarker(new MarkerOptions().position(new LatLng(center.lat, center.lng)).icon(BitmapDescriptorFactory
                                .fromResource(R.drawable.myicon)));

            }
        }

    }

}
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />