2016-12-26 5 views
1

Ich versuche 3 Animationsanimationen nacheinander zu animieren. Ich möchte im Grunde, dass sich mein Dialogfragment vom unteren zum oberen Bildschirmrand bewegt und sich dann nach Erreichen des oberen Bildschirmrands ein wenig nach unten bewegt und dann wieder nach oben bewegt wird. Hier ist, was ich tue:Sequentielle Translate-Animationen funktionieren nicht wie erwartet

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> 

und in onCreateView() -Methode meiner DialogFragment I gesetzt:

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

und hier ist die dialogAnimation in meiner styles.xml Datei

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

Aber das funktioniert nicht wie ich erwartet habe. Zuerst bewegt es sich , erreicht aber nicht den Anfang der Seite, und dann bewegt es sich wieder nach unten und oben, aber es erreicht immer noch nicht den Anfang der Seite wie erwartet. Nach Beendigung der Animation bewegt sich das Fragment sofort nach oben (ohne Animation g). Irgendeine Idee darüber, was mit meinem XML falsch sein könnte?

Danke.

Antwort

0

Ich fand die Lösung.

Zunächst gab ich startOffset nicht an die erste translate-Animation. Deshalb ist es nicht oben angekommen. Zweitens muss ich von YDelta und von XDelta der dritten Translate-Animation wechseln. Die folgende Lösung funktioniert:

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