3

プロジェクトで Google マップ MapView を使用しています。ユーザーユーザーがマップ上の特定のマーカーをクリックしたときに、Googleマップのようなダイアログを作成する必要があり、ユーザーがクリックした場所(ビューポート内)にそのダイアログを配置する必要があります。ユーザーがマップ上でクリックした場所にダイアログの位置を設定するにはどうすればよいですか? ダイアログの位置を座標に設定する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() の使用例を見つけました。ただし、私の例は、googles 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

これは、マップビュー上のアンドロイドドラッグアンドドロップピンのサンプルコードです。これを参照してください

于 2012-08-07T11:17:33.970 に答える