顺序翻译动画无法按预期工作

时间:2016-12-26 08:00:12

标签: android android-animation

我正在尝试按顺序为3个翻译动画制作动画。我基本上希望我的对话框片段从屏幕的底部移动到顶部,然后在到达屏幕顶部之后向下移动一点,然后再次移动到顶部。这是我的工作:

slide_bottom_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0"/>

    <translate
        android:startOffset="300"
        android:duration="300"
        android:fromYDelta="0"
        android:toYDelta="10%p"/>

    <translate
        android:startOffset="600"
        android:duration="300"
        android:fromYDelta="10%p"
        android:toYDelta="0"/>
</set>

并在我设置的DialogFragment的onCreateView()方法中:

getDialog().getWindow().getAttributes().windowAnimations = R.style.dialogAnimation;

这是我的styles.xml文件中的dialogAnimation

<style name="dialogAnimation">
    <item name="android:windowEnterAnimation">@anim/slide_bottom_in</item>
    <item name="android:windowExitAnimation">@anim/slide_top_out</item>
</style>

但这不符合我的预期。首先它向上移动但没有到达页面顶部,然后它再次向下移动,但仍然没有按预期到达页面顶部。动画结束后,片段立即移动到顶部(没有animationg)。关于我的xml可能有什么问题的任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

首先,我没有给第一个翻译动画提供startOffset。这就是为什么它没有达到顶峰。其次,我需要改变第三个翻译动画的YDelta和XDelta。以下解决方案有效:

<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:fillAfter="true">

    <translate
        android:startOffset="1"
        android:duration="400"
        android:fromYDelta="100%p"
        android:toYDelta="0"/>

    <translate
        android:startOffset="401"
        android:duration="500"
        android:fromYDelta="0"
        android:toYDelta="7%p"/>

    <translate
        android:startOffset="901"
        android:duration="500"
        android:fromYDelta="0"
        android:toYDelta="-7%p"/>

</set>