我在我的项目中使用谷歌地图 MapView。当用户用户点击地图上的特定标记时,我需要创建一个类似于谷歌地图的对话框,并且我需要将该对话框定位在用户点击的位置(在视口内)。如何将对话框的位置设置为用户在地图上单击的位置?我已经看到 Dialog 的 API 将其位置设置为某个坐标,但不知道如何获取用户单击点的坐标。
谢谢你。
我在我的项目中使用谷歌地图 MapView。当用户用户点击地图上的特定标记时,我需要创建一个类似于谷歌地图的对话框,并且我需要将该对话框定位在用户点击的位置(在视口内)。如何将对话框的位置设置为用户在地图上单击的位置?我已经看到 Dialog 的 API 将其位置设置为某个坐标,但不知道如何获取用户单击点的坐标。
谢谢你。
制作要在该点显示的布局的类 MarkerPopup,然后在 onTap 方法上完成这样的操作
@Override
protected boolean onTap(int index) {
MyOverlayItem item = mOverlays.get(index);
MarkerPopup this.popup = new MarkerPopup(mapView);
MapView.LayoutParams params = new MapView.LayoutParams(
MapView.LayoutParams.WRAP_CONTENT, // width
MapView.LayoutParams.WRAP_CONTENT, // height
item.getPoint(), MapView.LayoutParams.BOTTOM_CENTER);
params.mode = MapView.LayoutParams.MODE_MAP;
this.mapView.addView(popup, params);
// change parameter
popup.setLayoutParams(params);
// visibility
popup.setVisibility(View.VISIBLE);
}
注册地图点击处理程序。
// Capture map click event.
google.maps.event.addListener(YourMap 'click', $.proxy(this.mapClickHandler, this));
在函数中,您将取回事件对象。从中您可以检索鼠标单击的纬度和经度。如果您有标记,则可以使用这些值来设置其在地图上的位置。
mapClickHandler = function (event)
{
var position = new google.maps.LatLng(event.latLng.lat(), event.latLng.lng())
// Main Marker. Or in your case a google maps dialogue.
this.marker.setPosition(position);
}
我突然想到你可能需要 x,y 屏幕坐标,我不确定,我尽可能避免使用它们,尽管它们也可以作为事件对象中的属性使用。
找到了一个使用 getProjection() 的示例,该示例有助于获取屏幕位置坐标。然而我的例子依赖于扩展谷歌的 OverlayView。我不确定是否有办法从地图本身获取投影。必须查一下。
MyOverlay.prototype = new google.maps.OverlayView();
var overlayProjection = this.getProjection();
var point = overlayProjection.fromLatLngToDivPixel(event.latLng);
point.x;
point.y;
这是mapview上的android拖放引脚的示例代码,请参阅此