3

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

谢谢。

回答

0

这里是为Android拖放引脚的示例代码上的MapView See This

+0

代码所做的就是坦然太大。你能指定定位对话框点击位置的代码位置吗? – Nitin 2012-08-11 04:57:05

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; 
+0

请注意,你可以缩短它setPosition(event.latLng) – Emile 2012-08-30 13:35:37

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

其实我已经创建了一个CustomItemizedOverlay扩展ItemizedOverlay并使用onTap方法来显示该对话框。我无法在CustomizedOverlay类中获取并设置MapView的LayouParams,因为我无法在onTap方法中调用MapView.LayoutParams。 – Nitin 2012-08-30 17:52:13

+0

如何通过使用MapView.LayoutParams来设置弹出窗口的位置? – Nitin 2012-08-30 18:11:25

+0

抱歉,错误。它将在ontap方法上。 – Jone 2012-09-04 13:00:35

相关问题