API карт Google с использованием обновлений местоположения SmartLocation происходит повсеместно - PullRequest
0 голосов
/ 28 декабря 2018

Итак, я создаю приложение, и мне нужны постоянные обновления местоположения для перемещения моего пользовательского маркера местоположения.Я хотел иметь плавное движение маркера, как у 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();
    }
}
...