顺序翻译动画无法按预期工作
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>
我正在尝试按顺序制作 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>