3

我在我的项目中使用谷歌地图 MapView。当用户用户点击地图上的特定标记时,我需要创建一个类似于谷歌地图的对话框,并且我需要将该对话框定位在用户点击的位置(在视口内)。如何将对话框的位置设置为用户在地图上单击的位置?我已经看到 Dialog 的 API 将其位置设置为某个坐标,但不知道如何获取用户单击点的坐标。

谢谢你。

4

3 回答 3

1

制作要在该点显示的布局的类 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);
}
于 2012-08-30T14:06:30.557 回答
1

注册地图点击处理程序。

// 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;
于 2012-08-30T13:34:38.980 回答
0

这是mapview上的android拖放引脚的示例代码,请参阅此

于 2012-08-07T11:17:33.970 回答