Android 如何将对话框的位置设置为用户在地图视图上单击的位置?

Android 如何将对话框的位置设置为用户在地图视图上单击的位置?,android,google-maps,android-layout,android-widget,android-ui,Android,Google Maps,Android Layout,Android Widget,Android Ui,我在我的项目中使用谷歌地图地图视图。当用户单击地图上的某个特定标记时,我需要创建一个类似谷歌地图的对话框,并且我需要将该对话框定位在用户单击的位置(在视口内)。 如何将对话框的位置设置为用户在地图上单击的位置? 我见过对话框的API将其位置设置为某个坐标,但不知道如何获取用户单击点的坐标 谢谢。以下是mapview上android拖放pin的示例代码注册地图点击处理程序 // Capture map click event. google.maps.event.addListener(YourM

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


谢谢。

以下是mapview上android拖放pin的示例代码

注册地图点击处理程序

// 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()的示例,该示例有助于获取屏幕位置坐标。然而,我的例子依赖于扩展Google OverlyView。我不确定是否有办法从地图本身获得投影。我得查一下

MyOverlay.prototype = new google.maps.OverlayView();

var overlayProjection = this.getProjection();
var point = overlayProjection.fromLatLngToDivPixel(event.latLng);
point.x;
point.y;

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

坦率地说,代码太大了。您可以指定用于定位对话框以单击位置的代码在哪里吗?请注意,您可能会将其缩短为setPosition(event.latLng)。实际上,我已经创建了一个CustomItemizedOverlay扩展ItemizedOverlay并使用onTap方法显示该对话框。我无法在CustomizedOverlay类中获取和设置MapView的LayouParams,因为我无法在onTap方法中调用MapView.LayoutParams。顺便问一下,如何使用MapView.LayoutParams设置弹出窗口的位置以供用户单击?很抱歉出错。它将使用ontap方法。