2013-06-18 26 views
6

我有一个谷歌地图(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

尝试同时使用moveCameraanimateCamera ...

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

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

moveCamera将直接移动到这个位置,而animateCamera将提供移动效果。它们在本质上是线性的,所以一个会在另一个之后发生,但是如上所述将它们分层将提供潜在的效应您正在寻找。

如果您试图在UI上看到两个调用的实际移动,您需要根据需要注册回调帖子以完成动画。

+0

谢谢 - 这是诀窍。 – Miki

+0

无需事件总线,线程或其他任何东西来链接两个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为例如何链无限。