2

現在、デフォルトでは、マーカーをタップすると、マップはマーカーを中心に表示されます。それを制御する方法はありますか、いくつかのオフセット値を導入してください。時々少し高いポップアップ情報ウィンドウがあり、上部が途切れないようにマップを配置したいと思います。

4

2 に答える 2

3

おそらく、GoogleMap マーカーのクリック イベントをオーバーライドして、そこでカメラを調整できます。

例えば

Maker lastOpened = null;

mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    public boolean onMarkerClick(Marker marker) { 
        // Check if there is an open info window
        if (lastOpened != null) {
            // Close the info window
            lastOpened.hideInfoWindow();

            // Is the marker the same marker that was already open
            if (lastOpened.equals(marker)) {
                // Nullify the lastOpened object
                lastOpened = null;
                // Return so that the info window isn't opened again
                return true;
            } 
        }

        // Open the info window for the marker
        marker.showInfoWindow();
        // Re-assign the last opened such that we can close it later
        lastOpened = marker;

        // Get the markers current position
        LatLng curMarkerPos = marker.getPosition();

        // Use the markers position to get a new latlng to move the camera to such that it adjusts appropriately to your infowindows height (might be more or less then 0.3 and might need to subtract vs add this is just an example)
        LatLng camMove = new LatLng(curMarkerPos.latitude + 0.3, curMarkerPos.longitude);

        // Create a camera update with the new latlng to move to            
        CameraUpdate camUpdate = CameraUpdateFactory.newLatLng(camMove);
        // Move the map to this position
        mMap.moveCamera(camUpdate);

        // Event was handled by our code do not launch default behaviour.
        return true;
    }
});

mMap.setOnMapClickListener(new OnMapClickListener() {

    @Override
    public void onMapClick(LatLng point) {
        if (lastOpened != null) {
            // Hide the last opened
            lastOpened.hideInfoWindow();

            // Nullify lastOpened
            lastOpened == null;
        }

        // Move the camera to the new position
        final CameraPosition cameraPosition = new CameraPosition.Builder().target(point).zoom(mMap.getCameraPosition().zoom).build();

        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    });

このコードはテストされていませんが、少なくとも素晴らしいスタートを切れるはずです。onMarkerClick のデフォルトの動作は、カメラを移動して情報ウィンドウを開くことです。したがって、これをオーバーライドして独自に実装すると、カメラを好きな場所に移動できるようになります。

ありがとう、Dマン

于 2013-01-25T19:47:35.080 に答える
3

マーカークリックのデフォルトの中央移動動作を削除したいだけの人のために、上記の本当に素晴らしい答えを変更しました。

これを setUpMap() に追加します。

mMap.setOnMarkerClickListener(getMarkerClickListener());

次に、メソッドを追加します。

Marker lastOpened = null;

public OnMarkerClickListener getMarkerClickListener()  {
    return new OnMarkerClickListener()  {
        public boolean onMarkerClick(Marker marker) { 
            if (lastOpened != null) {
                lastOpened.hideInfoWindow();
                if (lastOpened.equals(marker)) {
                    lastOpened = null;
                    return true;
                } 
            }

            marker.showInfoWindow();
            lastOpened = marker;
            return true;
        }
    };
}
于 2013-02-06T03:48:57.603 に答える