2013-02-26 2 views
10

Я пытаюсь достичь: начать новую деятельность с анимацией перехода для текущей активности .Активация активности Android Android

Я хотел бы показывать текущую активность, когда новая активность будет за текущим.

Вот слайд вверх анимация: R.layout.slide_up

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

    <translate 
     android:duration="1000" 
     android:fromYDelta="0%" 
     android:toYDelta="100%" /> 

</set> 

Вот как я подаю переход активности анимации:

overridePendingTransition (0 , R.anim.slide_up); 

I я использую 0 для ввода активности, так как я не хочу, чтобы анимация для нового активность, и она не работает (анимация не выполняется). Если я использую анимации для ввода активности тоже работает (обе анимации выполняются), как например:

overridePendingTransition (R.anim.slide_out , R.anim.slide_up); 

где R.anim.slide_out:

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

    <translate 
     android:duration="1000" 
     android:fromYDelta="100%" 
     android:toYDelta="0%" /> 

</set> 

Любой идеи?

Я работаю на Android 4.1.2 и Android 4.0.4

ответ

12

Alter вашу выездную анимацию так, что он делает над верхней частью к поступлению деятельности.

R.anim.slide_up

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

    <translate 
     android:duration="1000" 
     android:fromYDelta="0%" 
     android:toYDelta="100%" /> 

</set> 

Тогда вы можете делать то, что вы изначально делаете, чтобы установить анимацию.

overridePendingTransition (0 , R.anim.slide_up); 
3

У меня точно такой же переход и такая анимация работает для меня:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_interpolator" 
android:fromYDelta="0%" android:toYDelta="100%" android:zAdjustment="top" 
android:duration="300" /> 
+1

Это потому, что это не совсем тот же переход. У вас есть набор свойств zAdjustment = "top", который позволяет воспроизводящей анимации воспроизводить верхнюю часть входящей анимации, так как по умолчанию анимация ввода воспроизводится над выходом. – MCeley

+0

вот в чем смысл :) – Zielony

1

Используйте следующую строку после startActivity

overridePendingTransition(0,0); 

Это аннулирует анимации по умолчанию и не делают никакой анимации , Вы также можете дать некоторые пользовательские анимации, если вам нравится

overridePendingTransition(R.anim.animation1,R.anim.animation2); 
0

Где бы вы вызываете намерение начать свою деятельность, вам необходимо изменить намерение. ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this); startActivity(intent, options.toBundle());

Если у вас есть какие-либо специальный метод setupTransitions() Вы можете поставить следующие две строки кода, там, иначе вы можете поместить их в onCreate()

getWindow().setEnterTransition(new Slide(Gravity.RIGHT).setDuration(800)); 

тяжести.RIGHT - это то, что определяет направление, с которого вы хотите начать свою следующую деятельность. setDuration() метод является необязательным, для более плавного перехода я использовал его, вам не обязательно.

Исследуйте больше, играя с различными значениями силы тяжести и setDuration.

Смежные вопросы