2015-11-03 125 views
2

一旦用戶打開該功能並開始終止,我必須在谷歌地圖中顯示實時/實時用戶的移動位置。谷歌地圖:移動標記和地圖一起順利與用戶?

我已經使用下面的方法來爲標記設置動畫。

private void animateMarker(final Marker marker, final LatLng toPosition, 
           final boolean hideMarker) { 
     final Handler handler = new Handler(); 
     final long start = SystemClock.uptimeMillis(); 
     Projection proj = mMap.getProjection(); 
     Point startPoint = proj.toScreenLocation(marker.getPosition()); 
     final LatLng startLatLng = proj.fromScreenLocation(startPoint); 
     final long duration = 1000; 

     final Interpolator interpolator = new LinearInterpolator(); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       long elapsed = SystemClock.uptimeMillis() - start; 
       float t = interpolator.getInterpolation((float) elapsed 
         /duration); 
       double lng = t * toPosition.longitude + (1 - t) 
         * startLatLng.longitude; 
       double lat = t * toPosition.latitude + (1 - t) 
         * startLatLng.latitude; 
       marker.setPosition(new LatLng(lat, lng)); 

       if (t < 1.0) { 
        // Post again 16ms later. 
        handler.postDelayed(this, 16); 
       } else { 
        if (hideMarker) { 
         marker.setVisible(false); 
        } else { 
         marker.setVisible(true); 
        } 
       } 
      } 
     }); 
    } 

並使用下面的代碼也移動地圖。

// Showing the current location in Google Map 
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
// Zoom in the Google Map 
mMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 

我迄今做得不夠好,移動標記和映射到一起。它看起來並不完美。我必須將地圖和標記一起移動。

Source Code

謝謝。

+0

你解決了這個問題嗎?如果是這樣,怎麼樣? –

回答

1
  • 我在我的類似項目中所做的是這樣的:假設我有一個用戶一個接一個地瀏覽的點的列表,所以我想用動畫在地圖上顯示那個旅程。您不必在同一時間移動標記和攝像機,而是可以在兩點之間移動標記,然後將攝像機移動到第二個點,現在再次將標記移動到下一個點,然後當標記伸出下一個點時,爲相機設置動畫。

爲了得到這個工作,你必須稍微修改你的代碼。如果有什麼不順心

private static final int ANIMATE_SPEEED_TURN = 1000; 
    private static final int BEARING_OFFSET = 20;  

    if (t < 1) { 
      mHandler.postDelayed(this, 16); 
     } else { 

     // your code 
     if (hideMarker) { 
        marker.setVisible(false); 
       } else { 
        marker.setVisible(true); 
       } 


     //my added code 
       LatLng begin = getBeginLatLng();// current point 
       LatLng end = getEndLatLng();// next point 

       float bearingL = bearingBetweenLatLngs(begin, end); 

       CameraPosition cameraPosition = 
         new CameraPosition.Builder() 
           .target(end) 
           .bearing(bearingL + BEARING_OFFSET) 
           .tilt(tilt) 
           .zoom(googleMap.getCameraPosition().zoom) 
           .build(); 

       googleMap.animateCamera(
         CameraUpdateFactory.newCameraPosition(cameraPosition), 
         ANIMATE_SPEEED_TURN, 
         null 
       ); 

       mHandler.postDelayed(animator, 16); 

      } 

讓我知道!!!: 添加該代碼 有關詳細步驟,請訪問Animating the map