Android Lollipop中的缩放转换

时间:2015-01-18 14:30:42

标签: android android-5.0-lollipop

我在github项目中找到了这个Scale转换。但我发现它仍有缺陷:视图从一开始就可见,然后动画从无到有,从全开始。预期的结果是:从动画开始之前看不到视图。

这是代码:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class Scale extends Visibility {
    public Scale(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public Scale() {
        super();
    }

    @Override
    public Animator onAppear(ViewGroup sceneRoot, View view,    TransitionValues startValues, TransitionValues endValues) {
        return createScaleAnimator(view, 0, 1);
    }

    @Override
    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
        return createScaleAnimator(view, 1, 0);
    }

    public Animator createScaleAnimator(View view, float startScale, float endScale) {
        PropertyValuesHolder holderX = PropertyValuesHolder.ofFloat("scaleX", startScale, endScale);
        PropertyValuesHolder holderY = PropertyValuesHolder.ofFloat("scaleY", startScale, endScale);
        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, holderX, holderY);
        return animator;
    }
}

这是如何使用它:

<transition
    class="com.jimulabs.googlemusicmock.transition.Scale"
    android:startDelay="500">
    <targets>
        <target android:targetId="@id/fab" />
    </targets>
</transition>

幻灯片切换按预期工作,因为它会在动画之前隐藏视图。

任何人都知道Scale课程有什么问题?感谢。

1 个答案:

答案 0 :(得分:2)

初始比例应在createAnimtorScale中设置。

view.setScaleX(startScale);
view.setScaleY(startScale);

否则初始比例直到动画师运行才开始。