2016-11-22 87 views
1

我想放大的GoogleMap的位置,其顯示爲標誌,並在此之後,滾動該標誌由像素的權利, 目前我結合2分的動作像上面這樣這樣的:縮放地圖到某個位置,將其移動到右

LatLng point = new LatLng(lat,lon); 

MarkerOptions endMarker = new MarkerOptions().position(point); 

googleMap.addMarker(endMarker); 

googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(point, 15f)); 

int screenWidth = getScreenWidth(); 

int margin = (int) getResources().getDimension(R.dimen.double_standard_margin_padding); 

new Handler().postDelayed(() -> googleMap.animateCamera(CameraUpdateFactory.scrollBy(-(screenWidth - margin) * 3/8, 0), new GoogleMap.CancelableCallback() { 
        @Override 
        public void onFinish() { 

        } 

        @Override 
        public void onCancel() { 

        } 
       }), 1000); 

正如你所看到的,我加2層的方法來做到這一點:

googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(point, 15f)); 

googleMap.animateCamera(CameraUpdateFactory.scrollBy(-(screenWidth - margin) * 3/8, 0) 

我不得不推遲行動,移動地圖,因爲我們不知道什麼時候該地圖被放大

有時候地圖上動彈不得(onCancel()),所以我不能收到預期的UI。

可能有人知道如何在只有一個辦法歸檔?

回答

1

我幾次遇到同樣的問題,我創建了一個CameraUpdateAnimator,它執行帶有給定延遲(如果需要)的CameraUpdates鏈,並允許移動或動畫攝像頭(請參閱my project on GitHub)。我認爲,它可以在你的情況下非常有用:

CameraUpdateAnimator animator = new CameraUpdateAnimator(mMap, this); // Parameters: a GoogleMap instance and an OnCameraIdleListener to return the control to (can be null) 
animator.add(CameraUpdateFactory.newLatLngZoom(point, 15f), false, 0); // Move the camera without delay 
animator.add(CameraUpdateFactory.scrollBy(-(screenWidth - margin) * 3/8, 0), true, 1000); // Animate the camera with a 1000 milliseconds delay 
animator.execute(); 
相關問題