如何将对话框的位置设置为用户点击MapView的位置?

时间:2012-08-07 08:09:20

标签: android google-maps android-layout android-widget android-ui

我在我的项目中使用谷歌地图MapView。当用户用户点击地图上的特定标记时,我需要创建一个像谷歌地图一样的对话框,我需要将用户点击的对话框定位(在视口内)。 如何将对话框的位置设置为用户点击地图的位置? 我已经看过Dialog的API将它的位置设置为某个坐标,但不知道如何获得用户点击的点的坐标。

谢谢。

3 个答案:

答案 0 :(得分:1)

注册地图点击处理程序。

// Capture map click event.
google.maps.event.addListener(YourMap 'click', $.proxy(this.mapClickHandler, this));

在该功能中,您将获得事件对象。从这里你可以检索lat和long鼠标点击。如果您有标记,则可以使用这些值在地图上设置其位置。

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;

答案 1 :(得分: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);
}

答案 2 :(得分:0)

以下是mapview See This

上Android安卓拖放图钉的示例代码