首页 > 解决方案 > 如何在android中为标记设置动画

问题描述

顺便说一句,我有这段代码是借来的...

Ice Cream Sandwich compatible
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public static void animateMarkerToICS(Marker marker, LatLng finalPosition, final LatLngInterpolator latLngInterpolator) {

    TypeEvaluator<LatLng> typeEvaluator = new TypeEvaluator<LatLng>() {
        @Override
        public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) {
            return latLngInterpolator.interpolate(fraction, startValue, endValue);
        }
    };
    Property<Marker, LatLng> property = Property.of(Marker.class, LatLng.class, "position");

    // ADD THIS TO STOP ANIMATION IF ALREADY ANIMATING TO AN OBSOLETE LOCATION
    if(animator != null && animator.isRunning()) {
        animator.cancel();
        animator = null;
    }
    animator = ObjectAnimator.ofObject(marker, property, typeEvaluator, finalPosition);
    animator.setDuration((long) ANIMATION_DURATION);
    animator.start();
}

发生的事情是我在这行代码中有问题..

animator = ObjectAnimator.ofObject(marker, property, typeEvaluator, finalPosition);
    animator.setDuration((long) ANIMATION_DURATION);
    animator.start();

我使用 api 17,但库 FrameMetrics.ANIMATION_DURATION 从 api 24 开始工作......我想继续使用 api 17 有没有办法给我的 animator.setDuration () 提供与库相同的值?

标签: androidandroid-animation

解决方案


据我了解,您FrameMetrics.ANIMATION_DURATION仅用于动画持续时间。您可以使用所需的值,例如 1000 或 100,也可以使用FrameMetrics.ANIMATION_DURATION映射到 2 的 Constant 值。使用常量值将消除 API 24 作为最低 API 的要求。利用

animator.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime));

或者

animator.setDuration(1000);

推荐阅读