Итак, я создаю приложение, и мне нужны постоянные обновления местоположения для перемещения моего пользовательского маркера местоположения.Я хотел иметь плавное движение маркера, как у Uber.Я реализовал библиотеку SmartLocation с помощью FusedLocationProvider, точность определения местоположения установлена на HIGH, и местоположение обновляется каждую секунду, но по какой-то причине я получаю медленные обновления, которые не точны.Может кто-нибудь сказать мне, что я делаю не так?
public void onLocationUpdatedListenerInit(){
onLocationUpdatedListener=new OnLocationUpdatedListener() {
@Override
public void onLocationUpdated(Location location) {
animateMarker(location, myLocation);
}
};
}
public void startingLocationTracking(){
LocationParams.Builder builder = new LocationParams.Builder().setAccuracy(LocationAccuracy.HIGH)
.setDistance(0)
.setInterval(1000);
SmartLocation.with(this).location(new LocationGooglePlayServicesProvider()).continuous().config(builder.build()).start(onLocationUpdatedListener);
}
Метод AnimateMarker:
public static void animateMarker(final Location destination, final Marker marker) {
if (marker != null) {
final LatLng startPosition = marker.getPosition();
final LatLng endPosition = new LatLng(destination.getLatitude(), destination.getLongitude());
final float startRotation = marker.getRotation();
final LatLngInterpolator latLngInterpolator = new LatLngInterpolator.LinearFixed();
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.setDuration(1000); // duration 1 second
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override public void onAnimationUpdate(ValueAnimator animation) {
try {
float v = animation.getAnimatedFraction();
LatLng newPosition = latLngInterpolator.interpolate(v, startPosition, endPosition);
marker.setPosition(newPosition);
marker.setRotation(computeRotation(v, startRotation, destination.getBearing()));
} catch (Exception ex) {
// I don't care atm..
}
}
});
valueAnimator.start();
}
}