8

したがって、これがバグであるかどうかはわかりません...バグであるか、何かを見逃している可能性があります。

とにかく、ここにGoogle Maps V2CameraControlsへのリンクがあります。https://developers.google.com/maps/documentation/android/views#moving_the_camera

問題 :

すでにアニメーション化されている場所にアニメーション化しても、onFinish()は呼び出されません。

複製する方法:

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mLocation.getLatLng(), zoomLevel), 200, new GoogleMap.CancelableCallback() {

                    @Override
                    public void onFinish() {
                        //DO some stuff here!
                    Log.d("animation", "onFinishCalled");

                    }

                    @Override
                    public void onCancel() {
                    Log.d("animation", "onCancel");


                    }
                }); 

この問題は、ユーザーが同じアニメーションを呼び出すものをダブルタップしたときに発生する可能性があります。間隔が長くても、onFinishはアニメーションが成功した場合にのみ呼び出されます。カメラがすでに配置されている場合、onFinishメソッドは呼び出されません。

カメラのアニメーションを作成する前にチェックを行うこともできますが、それは無駄なので好きではありません。

どんな助けでもいただければ幸いです。ありがとう。

4

4 に答える 4

15

カメラを同じ位置に移動したいときに同じ問題が発生します。バグのようです。古い位置と新しい位置が同じでなく、差が非常に小さい場合でも、例:old position.latitude = 94.54284009112、new position.latitude = 94.54284003451、それは機能しません。私の解決策は、値を切り捨ててold_position.latitude = new_position.latitude = 94.54のみを取得してから、テストを実行することです。

カメラの移動と地図のスクロールを同時に行うことには別の問題があります。移動する前にスクロールジェスチャを無効にし、onFinish()とonCancel()で有効にします。

public void animateCameraTo(final double lat, final double lng)
{
    _googleMap = getMap();
    CameraPosition camPosition = _googleMap.getCameraPosition();
    if (!((Math.floor(camPosition.target.latitude * 100) / 100) == (Math.floor(lat * 100) / 100) && (Math.floor(camPosition.target.longitude * 100) / 100) == (Math.floor(lng * 100) / 100)))
    {
        _googleMap.getUiSettings().setScrollGesturesEnabled(false);
        _googleMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lng)), new CancelableCallback()
        {

            @Override
            public void onFinish()
            {
                _googleMap.getUiSettings().setScrollGesturesEnabled(true);

            }

            @Override
            public void onCancel()
            {
                _googleMap.getUiSettings().setAllGesturesEnabled(true);

            }
        });
    }

}

これがお役に立てば幸いです;)

于 2013-04-04T15:22:24.740 に答える
2

地理的距離ではなく、ピクセル距離を確認する必要があります。

LatLngBounds myBounds = YOUR_BOUNDS;
LatLngBounds visibleBounds = map.getProjection().getVisibleRegion().latLngBounds;
Point myCenter = map.getProjection().toScreenLocation(myBounds.getCenter());
Point visibleCenter = map.getProjection().toScreenLocation(visibleBounds.getCenter());
int dist = (int) Math.sqrt(Math.pow(myCenter.x - visibleCenter.x, 2) + Math.pow(myCenter.y - visibleCenter.y, 2));
if (dist > YOUR_THRESHOLD) {
    map.animateCamera(CameraUpdateFactory.newLatLngBounds(myBounds, YOUR_PADDING), new GoogleMap.CancelableCallback() {
        @Override
        public void onFinish() {
            // do something
        }

        @Override
        public void onCancel() {
            // do something
        }
    });
} else {
    // do something
}
于 2014-06-07T11:28:55.593 に答える
0

私が見つけた唯一の解決策は、無駄なピクセル値のチェックを行い、偽の(しかし閉じる)CameraUpdateオブジェクトを設定し、最初に偽のCameraUpdateを使用してネストされたanimateCamera()呼び出しを行い、次に最初のonFinish()内で別のcameraUpdate()を呼び出すことです。正しいCameraUpdateで。今日GoogleMAPv2アップデートをインストールしましたが、役に立ちませんでした。これは私にとってデバイスの回転に関する問題です。境界の長方形を表示していますが、回転時に図心が変化しないため、animateCamera()が機能せず、デバイスを回転させると、選択した長方形が部分的に画面から外れる場合があります。

別の解決策をもう見つけましたか?ありがとう

于 2013-03-07T07:45:14.110 に答える
-1

別の回避策は次のとおりです。

あなたはあなたの地図アニメーションのアニメーションの持続時間を知っています。したがって、アニメーション期間の遅延+オフセットを使用して遅延実行可能ファイルを投稿し、そこで終了/キャンセルされたリスナーが呼び出されたかどうかを確認できます...呼び出されなかった場合は、そこでフェッチして適切なリスナーを呼び出すことができます

于 2013-07-26T09:04:11.093 に答える