如何将对话框的位置设置在用户点击地图视图的位置?

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

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;

请注意,您可以将其缩短为setPosition(event.latLng)。 - Emile

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);
}

实际上,我已经创建了一个扩展ItemizedOverlay的CustomItemizedOverlay,并使用onTap方法来显示该对话框。我无法在CustomizedOverlay类中获取和设置MapView的LayouParams,因为我无法在onTap方法中调用MapView.LayoutParams。 - Nitin
我可以通过使用MapView.LayoutParams来设置弹出窗口的位置吗?顺便问一下,这个位置是根据用户的点击来确定的。 - Nitin
抱歉出错了,应该是在ontap方法中。 - Asad Rao

0

这里是关于在地图视图上实现安卓拖放标记的示例代码请参见此处


代码实在太大了。你能具体指出对话框定位至点击位置的代码在哪里吗? - Nitin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接