Анимация автомобиля Маркерное движение возвращается на север после остановки - PullRequest
0 голосов
/ 09 декабря 2018

Я оживляю машину, двигающуюся по улице с обновлениями местоположения в реальном времениВо время движения он движется в правильном направлении, но когда движение останавливается, автомобиль направлен на истинный север, и подшипник возвращается на 0,0 независимо от того, в каком направлении я нахожусь.Следуйте коду, который я использую:

public static void animateMarker(Marker marker, Location destination) {
    if (marker != null) {
        LatLng startPosition = marker.getPosition();
        LatLng endPosition = new LatLng(destination.getLatitude(), destination.getLongitude());

        float startRotation = marker.getRotation();

        LatLngInterpolator latLngInterpolator = new LatLngInterpolator.LinearFixed();
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
        valueAnimator.setDuration(1000); // duration 1 second
        valueAnimator.setInterpolator(new LinearInterpolator());
        valueAnimator.addUpdateListener(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) { }
        });

        valueAnimator.start();
    }
}

private static float computeRotation(float fraction, float start, float end) {
    float normalizeEnd = end - start; // rotate start to 0
    float normalizedEndAbs = (normalizeEnd + 360) % 360;

    float direction = (normalizedEndAbs > 180) ? -1 : 1; // -1 = anticlockwise, 1 = clockwise
    float rotation;
    if (direction > 0) {
        rotation = normalizedEndAbs;
    } else {
        rotation = normalizedEndAbs - 360;
    }

    float result = fraction * rotation + start;
    return (result + 360) % 360;
}

как это решить?

...