Я пытаюсь анимировать мой маркер, а не прыгать между двумя точками. По какой-то причине анимация не работает.Маркер Анимация на Картах Google Android не работает
Каждый раз, когда я получаю новое текущее местоположение, я вызываю приведенный ниже код.
if (currentLatitude != 0 && currentLongitude != 0) {
String actualRideStartTime = "";
if (currentRideTracking.getActualRideStartTime() != 0) {
actualRideStartTime = TIME_FORMAT.format(currentRideTracking
.getActualRideStartTime());
}
vehicleLocation = new LatLng(currentLatitude, currentLongitude);
markerOptions = new MarkerOptions().
.position(vehicleLocation);
animateMarker(map.addMarker(markerOptions), vehicleLocation, false);
// builder.include(vehicleLocation);
}
метод AnimateMarker
public void animateMarker(final Marker marker, final LatLng toPosition,
final boolean hideMarker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = map.getProjection();
Point startPoint = proj.toScreenLocation(marker.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = God.DRIVER_LOCATION_UPDATE_FREQUENCY;
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));
Log.d(God.LOG_TAG, ">"+lat+"<"+lng) ;
if (t < 1.0) {
// Post again 16ms later.
handler.postDelayed(this, 16);
} else {
if (hideMarker) {
marker.setVisible(false);
} else {
marker.setVisible(true);
marker.showInfoWindow();
}
}
}
});
}
Я попытался закомментировав // builder.include(vehicleLocation);
но все же плавное движение DonT происходит, вместо этого он прыгает вперед так же, как раньше.
Редактировать: Имеет ли значение периодичность обновлений? Я использую googleapiclient
, поэтому я не знаю, как часто обновляются обновления. Максимальное время ожидания установлено на God.DRIVER_LOCATION_UPDATE_FREQUENCY
, которое используется в duration
в методе animateMarker
.
маркер уходит вправо право на размещение? просто анимация не работает, она идет слишком быстро, что кажется прыжком, и вы хотите, чтобы все прошло гладко? –
Да, вы правы, перемещается в нужное место, просто не является гладким. – Siddharth