2015-11-03 86 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