安卓:为标记移动添加动画效果



在我的应用程序中,我使用 KSOAP2 获取车辆的当前位置并将其显示在地图上。到目前为止,我正在清除所有标记(mGoogleMap.clear();),然后为每个新位置更新添加一个新标记(mGoogleMap.addMarker(new MarkerOptions().position(buslatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.bus)));)

然而,这种方法会导致标记突然移动,看起来不太好。因此,我将旧的 LatLang 存储在一个变量中,并希望标记从旧位置缓慢移动到新位置并缩放/调整地图,以便新位置位于中心位置。使用的代码:

activity.runOnUiThread(new Runnable() {
@Override
public void run() {
busMarker = mGoogleMap.addMarker(new MarkerOptions().position(buslatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.bus)));
double[] startValues = LastbuslatLng==null ?  new double[]{buslatLng.latitude, buslatLng.longitude} : new double[]{LastbuslatLng.latitude, LastbuslatLng.longitude};
double[] endValues = new double[]{buslatLng.latitude, buslatLng.longitude};
ValueAnimator latLngAnimator = ValueAnimator.ofObject(new DoubleArrayEvaluator(), startValues, endValues);
latLngAnimator.setDuration(600);
latLngAnimator.setInterpolator(new DecelerateInterpolator());
latLngAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
double[] animatedValue = (double[]) animation.getAnimatedValue();
busMarker.setPosition(new LatLng(animatedValue[0], animatedValue[1]));
}
});
latLngAnimator.start();
}
});
LastbuslatLng = buslatLng;

当开始时只有一个位置时,我将不得不处理这种情况。但是,我没有看到标记在移动,也没有缩放。谁能帮我说错了?

为了将摄像机动画化到特定位置,我使用以下代码片段, 在以下示例中,摄像机将顺利移动到此37.4219999,-122.0862462位置

CameraPosition googlePlex = CameraPosition.builder()
.target(new LatLng(37.4219999,-122.0862462))
.zoom(16)
.bearing(0)
.tilt(45)
.build();
mGooglemap.animateCamera(CameraUpdateFactory.newCameraPosition(googlePlex), 10000, null);

最新更新