如何将对话框的位置设置为用户点击MapView的位置?
我在我的项目中使用谷歌地图MapView。当用户用户点击地图上的特定标记时,我需要创建一个像Google地图那样的对话框,并且需要将该用户单击的对话框(视口内部)定位。 如何将对话框的位置设置为用户点击地图的位置? 我已经看到对话框的API将它的位置设置为一些坐标,但不知道如何获得用户点击的坐标。如何将对话框的位置设置为用户点击MapView的位置?
谢谢。
注册地图上点击处理程序。
// 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;
请注意,你可以缩短它setPosition(event.latLng) – Emile 2012-08-30 13:35:37
化妆类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);
}
其实我已经创建了一个CustomItemizedOverlay扩展ItemizedOverlay并使用onTap方法来显示该对话框。我无法在CustomizedOverlay类中获取并设置MapView的LayouParams,因为我无法在onTap方法中调用MapView.LayoutParams。 – Nitin 2012-08-30 17:52:13
如何通过使用MapView.LayoutParams来设置弹出窗口的位置? – Nitin 2012-08-30 18:11:25
抱歉,错误。它将在ontap方法上。 – Jone 2012-09-04 13:00:35
代码所做的就是坦然太大。你能指定定位对话框点击位置的代码位置吗? – Nitin 2012-08-11 04:57:05