停止时动画汽车标记运动返回到北方

时间:2018-12-09 20:57:49

标签: java android google-maps location android-animation

我正在用实时位置更新为在街道上行驶的汽车设置动画。在移动时,它会正确地朝该方向定位,但是当运动停止时,无论我朝哪个方向,汽车都将朝着真正的北方,并且轴承将返回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;
}

如何解决这个问题?

0 个答案:

没有答案