2012-02-15 12 views
36

Co staram się osiągnąć, to przesłonić animację rozpoczęcia aktywności.Nowa aktywność pojawia się za starym podczas przejścia

Animacja powinna sprawiać wrażenie, że stara aktywność jest na szczycie nowej aktywności, a następnie zsuwa się i znika z ekranu, ujawniając nową aktywność. Próbowałem na wiele sposobów, takich jak używanie overridePendingTransition(startAnim, exitAnim) Ale problem polega na tym, że oba są animowane na tej samej linii czasu. Tak więc overridePendingTransition(R.anim.hold, R.anim.exit_slide_down); Nigdy nie widzisz animacji wyjścia, ponieważ nowa aktywność jest na wierzchu. Czy można to osiągnąć za pomocą ram?

enter image description here

+0

Wierzę, że można opóźnić animacja, przepraszam jednak za to, że nie jestem bardziej pomocna. – Warpzit

+0

możliwy duplikat [Czy mogę zmienić animację przejścia do startu systemu Android startActivity()?] (Http://stackoverflow.com/questions/3515264/can-i-change-the-android-startactivity-transition-animation) –

Odpowiedz

31

Właściwie znalazłem właściwość o nazwie android:zAdjustment w plikach animacji.

Jeśli umieścić android:zAdjustment="bottom" w hold.xml ekranu (2) i android:zAdjustment="top" w push_down_out.xml (ekran 1), to można uzyskać pożądany efekt.

Pozwala to obejść problem z zamówieniem (założyłem, że był to problem z synchronizacją animacji, więc podszedłem do niewłaściwego drzewa).

John

+4

Czy mógłbyś podać, jak wyglądały twoje pliki animacji? – Emil

+0

To się okazało dlatego moja animacja przejścia nie grała. Jako dodatkową premię musiałem tylko dodać android: zAdjustment = "top" do wyjścia (ten, który chciałem grać na górze), więc nie potrzebujesz nawet "dolnego". – MacD

+0

@johncc Czy możesz dołączyć pliki xml i kod źródłowy? Dzięki! –

30

Próbowałem rozwiązać swoje rozwiązanie w projekcie próbki i mam go pracy z tym kodem:

połączeń animacja z:

startActivity(new Intent(this, Activity2.class)); 
overridePendingTransition(R.anim.push_down_in,R.anim.push_down_out); 

R.anim .push_down_in:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="300"/> 
</set> 

R.anim.push_down_out:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="300"/> 
</set> 
+2

w rzeczywistości, jeśli nadać inny czas każdej animacji, daje naprawdę fajne wrażenie. Na przykład dla R.anim.push_down_in: 'android: duration =" 900 "' i dla R.anim.push_down_out: 'android: duration =" 1500 "' – mehmet

7

Rozwiązanie, które działa na mnie:

R.anim.exit_slide_down

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:zAdjustment="top"> 

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

... a potem

Intent intent = new Intent(activity, SecondActivity.class); 
startActivity(intent); 
activity.overridePendingTransition(0, R.anim.exit_slide_down); 
Powiązane problemy