我有一个小机器人的问题(谷歌地图V2 API)
这是我的代码:
GoogleMaps mMap;
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20)));
我试图找到一种方式来获得这个标记对象的当前屏幕坐标(X,Y)。
也许有人有一个想法? 我试图getProjection,但没有看到工作。 谢谢! :)
我有一个小机器人的问题(谷歌地图V2 API)
这是我的代码:
GoogleMaps mMap;
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20)));
我试图找到一种方式来获得这个标记对象的当前屏幕坐标(X,Y)。
也许有人有一个想法? 我试图getProjection,但没有看到工作。 谢谢! :)
是的,使用Projection
类。 进一步来说:
获取Projection
地图:
Projection projection = map.getProjection();
让您的标记的位置:
LatLng markerLocation = marker.getPosition();
传递位置到Projection.toScreenLocation()
方法:
Point screenPosition = projection.toScreenLocation(markerLocation);
就这样。 现在screenPosition
将包含相对于整个地图容器的左上角的标记的位置:)
请记住,在Projection
的地图已通过布局过程后对象将只返回有效值(即,它具有有效的width
和height
设置)。 你可能会得到(0, 0)
因为你试图过早地访问标记的位置,像这样的场景:
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);
}
});
}
请通过附加信息的评论阅读。