我正在尝试按顺序为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可能有什么问题的任何想法?
感谢。
答案 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>