3

新しいGoogleMapsAndroid API v2を使用しており、画面ビューの隅の緯度座標を検出する必要があります。これを行うにはmMap.getProjection()。getVisibleRegion()を使用します。これは、プログラムを最初にロードしたときに正常に機能しますが、プログラムを終了してから再度開くと(戻るボタンまたはホームボタンを使用して)getVisibleRegion ()は、すべて(0.0、0.0)の緯度座標を返します。プログラムを最初に開いたときに、VisibleRegionオブジェクトをグローバルとしてアプリケーションクラスに保存する回避策がありますが、これは悪い考えのようです。再度開いたときにlatlng座標がゼロになる(ただしnullではない)理由を理解している人はいますか?ありがとう!

編集:初期ロードで(0.0、0.0)の可視領域が得られることがあるため、回避策は実行できません。getProjection()。fromScreenLocation(point)を使用しても0が返されます。

4

1 に答える 1

9

さて、私はそれを解決したと思います:私は正しく推測していました:地図は見えなかったので、visibleRegionもありません(言い換えれば、0,0,0,0から0,0,0,0までの領域)。この質問に似ています

onResumeからgetProjectionを呼び出すAndroidGoogleMaps API v2

onCameraChanged-Listenerをマップにアタッチしました。マップが移動されるたびに(またはカメラが使用可能になるたびに=> visibleRegionがあります)、このメソッドが呼び出されます。

private void initMap() {
    mMap = getMap();

    if (mMap != null) {
        try {

            mMap.setLocationSource(this);
            mMap.setOnMarkerClickListener(this);
            mMap.setOnCameraChangeListener(new OnCameraChangedListener() {
                @Override
                public void onCameraChange(CameraPosition cameraPosition) {
                  Log.d(TAG, "onCameraChange");
                  updateMapItems();
                }
            }
            MapsInitializer.initialize(getActivity());

            ...
        }
    }
}

このリスナーは、visibleRegionがあることを確認します。

更新: Google Maps API v2の新しい更新以降、コールバックがありますonMapReady()。私はまだそれを使用していませんが、それはこの質問の目的を正確に果たしているようです:https ://developer.android.com/reference/com/google/android/gms/maps/OnMapReadyCallback.html

于 2013-02-04T10:58:18.510 に答える