2013-06-18 4 views
6

Googleマップ(com.google.android.gms.maps.GoogleMap)にマーカーがいくつか設定されています。ズームレベルを境界に合わせて調整し、マーカーマップの中心にどのように調整するのですか?

は私は可能に、別々に、

1)ズームレベルを調整し、境界上の地図の中心:マーカーの一つの上

mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(getZoomBounds(), 10)); 

2)中心地図:

LatLng poiSelectedLatLng = new LatLng(markerSelected.getPosition().latitude 
    + offset, markerSelected.getPosition().longitude); 

mMap.animateCamera(CameraUpdateFactory.newLatLng(poiSelectedLatLng)); 

しかし、私の人生では、両方を行うことはできません。ズームレベルをne wLatLngBoundsし、地図のどこか他の場所に配置します。私が最後にやることは、地図で起こっていることです。

どうすればよいですか?

答えて

1

animateCameraが動く効果を提供する一方、その場所に直接移動します

mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(getZoomBounds(), 10)); 
LatLng poiSelectedLatLng = new LatLng(markerSelected.getPosition().latitude 
    + offset, markerSelected.getPosition().longitude); 

mMap.animateCamera(CameraUpdateFactory.newLatLng(poiSelectedLatLng)); 

moveCamera

... moveCameraanimateCameraの両方を使用してみてください。それらは線形であるので、上記のようにレイヤーを作成した後に他のレイヤーが生成されると、 の効果が得られます。

UIで両方の呼び出しの実際の動きを確認する場合は、コールバックに登録して、必要に応じてアニメーションの完了を通知する必要があります。将来の訪問者のための

+0

ありがとう - それはトリックでした。 – Miki

+0

2つのanimateCamera呼び出しを連鎖させるイベントバス、スレッドなどは必要ありません。アニメーションが終了するとコールバックがあります。 –

+0

@MaciejGórski良い点は、適宜編集されています。 –

3

これはどのようにすることができますチェーンのカメラアニメーションです:

map.animateCamera(CameraUpdateFactory.newLatLngBounds(getZoomBounds(), 10), 2000, new CancelableCallback() { 

    @Override 
    public void onFinish() { 
     LatLng poiSelectedLatLng = new LatLng(markerSelected.getPosition().latitude + offset, markerSelected.getPosition().longitude); 
     map.animateCamera(CameraUpdateFactory.newLatLng(poiSelectedLatLng)); 
    } 

    @Override 
    public void onCancel() { 
    } 
}); 

はまた無限にどのようにチェーンに例えばAnimateCameraChainingExampleActivity.javaを参照してください。