如何让屏幕在谷歌标记坐标映射V2的Android(How to get screen coordin

2019-07-18 11:50发布

我有一个小机器人的问题(谷歌地图V2 API)

这是我的代码:

GoogleMaps mMap;
Marker marker =  mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20)));

我试图找到一种方式来获得这个标记对象的当前屏幕坐标(X,Y)。

也许有人有一个想法? 我试图getProjection,但没有看到工作。 谢谢! :)

Answer 1:

是的,使用Projection类。 进一步来说:

  1. 获取Projection地图:

     Projection projection = map.getProjection(); 
  2. 让您的标记的位置:

     LatLng markerLocation = marker.getPosition(); 
  3. 传递位置到Projection.toScreenLocation()方法:

     Point screenPosition = projection.toScreenLocation(markerLocation); 

就这样。 现在screenPosition将包含相对于整个地图容器的左上角的标记的位置:)

编辑

请记住,在Projection 的地图已通过布局过程后对象将只返回有效值(即,它具有有效的widthheight设置)。 你可能会得到(0, 0)因为你试图过早地访问标记的位置,像这样的场景:

  1. 通过虚报它创建一个从布局XML文件中的地图
  2. 初始化地图。
  3. 添加标记到地图上。
  4. 查询Projection映射在屏幕上标记位置的。

这不是因为地图没有有效的宽度和高度集中的好主意。 你应该等到这些值是有效的。 解决的办法之一是附接OnGlobalLayoutListener到地图视图和等待布局处理沉降。 做充气布局和初始化地图后-在例如onCreate()

// map is the GoogleMap object
// marker is Marker object
// ! here, map.getProjection().toScreenLocation(marker.getPosition()) will return (0, 0)
// R.id.map is the ID of the MapFragment in the layout XML file
View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView();
if (mapView.getViewTreeObserver().isAlive()) {
    mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            // remove the listener
            // ! before Jelly Bean:
            mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            // ! for Jelly Bean and later:
            //mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            // set map viewport
            // CENTER is LatLng object with the center of the map
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(CENTER, 15));
            // ! you can query Projection object here
            Point markerScreenPosition = map.getProjection().toScreenLocation(marker.getPosition());
            // ! example output in my test code: (356, 483)
            System.out.println(markerScreenPosition);
        }
    });
}

请通过附加信息的评论阅读。



文章来源: How to get screen coordinates from marker in google maps v2 android