2013-10-29 72 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() { 
       } 
      }); 
相關問題