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

Sequential translate animations do not work as expected

我正在尝试按顺序制作 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>

但这并不像我预期的那样有效。首先它向上移动 但没有到达页面顶部 ,然后它再次向下移动并再次向上移动,但仍然没有按预期到达页面顶部。动画结束后,片段立即移动到顶部(没有动画)。知道我的 xml 有什么问题吗?

谢谢。

我找到了解决方案。

首先,我没有给第一个平移动画startOffset。这就是它没有到​​达顶部的原因。其次,我需要更改第三个翻译动画的 fromYDelta 和 fromXDelta。以下解决方案有效:

<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>