2013-10-29 43 views
2

我试图放大地图我可以在一个animateCamera上使用2个cameraUpdates吗?

CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(mBounds, this.getResources().getDisplayMetrics().widthPixels, 
         height, padding); 
mMap.animateCamera(cameraUpdate, duration, null); 

在此后,我想滚动地图垂直

CameraUpdate cameraUpdate = 
     CameraUpdateFactory.scrollBy(0, amountToScroll); 
    mMap.animateCamera(cameraUpdate, duration, null); 

的事情是......这是行不通的。如果我在缩放后立即调用滚动,则只考虑滚动。如果我在缩放动画完成后滚动地图,我将会有2个动画。

我想用相同的动画做两个操作,有可能吗?

回答

1

如果您多次拨打animateCamera,只有最后一个将完成其操作。

简单的解决方法是使用moveCamera而不是第一次拨打animateCamera,但这从UX角度来看并不是一个好的解决方案。

另一种方法是自己做数学并填写mBounds以确定您想要展示的范围。

+0

感谢您的答复。我同意,使用moveCamera并不好,我已经尝试过了。我不明白什么是另一种方式。我已经自己填充mBounds(这是一个LatLngBounds对象)。我只需要移动相机以放大这些边界。 – andrei

+0

@ user1990021 E.g.如果你的'mBounds'持有'[20,20; 30,30]'最初和滚动后你显示'[22,20; 32,30]',你需要你的'mBounds'来代替第二个值,并跳过'scrollBy'动画。这是使用第一个和缩放值计算第二个值的数学。 –

0

最简单的方法是使用CancelableCallback。你应该检查第一个动作完成,然后拨打第二个:

mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, size.x, height, 0), new CancelableCallback() { 

       @Override 
       public void onFinish() { 
        CameraUpdate cu_scroll = CameraUpdateFactory.scrollBy(0, 500); 
        mMap.animateCamera(cu_scroll); 
       } 

       @Override 
       public void onCancel() { 
       } 
      }); 
相关问题