2010-04-16 2 views
107

У меня есть две операции A и B. Я хочу иметь сжатие Анимация, когда Активность A вызывает B и максимизирует анимацию, когда действие B вызывает A. Мне не нужны файлы анимации xml для этого.Как обеспечить анимацию при вызове другой активности в Android?

Когда мы вызываем другое действие в Android, оно дает свою анимацию по умолчанию, а затем вызывает сжатие анимации.

Я хочу, чтобы анимация по умолчанию не возникала, и анимация, которую я хочу, должна произойти.

Можем ли мы дать анимацию при вызове другого мероприятия?

ответ

129

Поскольку API 16 вы можете поставлять варианты деятельности сверток при вызове Context.startActivity(Intent, Bundle) или связанных методов. Он создан с помощью ActivityOptions строителя:

Intent myIntent = new Intent(context, MyActivity.class); 
ActivityOptions options = 
    ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out); 
context.startActivity(myIntent, options.toBundle()); 

Не забудьте проверить другие методы строителя ActivityOptions и ActivityOptionsCompat, если вы используете библиотеку поддержки.



API 5+:

для приложений, ориентированных на уровень API 5+ есть Деятельность overridePendingTransition метод. Для входящих и исходящих анимаций требуется два идентификатора ресурсов. Идентификатор 0 отключит анимацию. Вызовите это сразу после вызова startActivity.

т.е .:

startActivity(new Intent(this, MyActivity.class)); 
overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 

API 3+:

Вы можете предотвратить анимацию по умолчанию (слайд справа) с Intent.FLAG_ACTIVITY_NO_ANIMATION флагом в своем намерении.

т.е .:

Intent myIntent = new Intent(context, MyActivity.class); 
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
context.startActivity(myIntent); 

то в вашей деятельности вы просто должны указать свой собственный анимации.

Это также работает для 1.5 API (уровень 3).

+4

Что вы имеете в виду когда вы говорите «укажите свою собственную анимацию»? Как ты делаешь это? Благодаря! – pqn

+0

У меня такой же вопрос. Возможно, в начале анимации в onResume и onPause. – Tima

+0

есть способ использовать Animator вместо этого? –

78

Чтобы достичь этого, вы должны использовать метод OverridePendingTransition, который находится в Activity class. Пример анимации в папке res/anim примера apidemos. Проверь это. Больше, чем проверить демо в ApiDemos/App/Activity/animation.

Пример:

@Override 
public void onResume(){ 
    // TODO LC: preliminary support for views transitions 
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); 
} 
+1

Спасибо за ответ. Метод overridePendingTransition поддерживается с уровня API 5, и я хочу, чтобы приложение поддерживалось с Android 1.5. Есть ли другой способ предоставления анимации из одной активности в другую. – sunil

+5

потрясающий! это очень весело играть с –

+0

@sunil У меня есть тот же quetion, что и у вас. Вы могли решить проблему? Анимация с уровнем api 3 или 4 (не 5) –

3

Jelly Bean добавляет поддержку для этого с помощью метода ActivityOptions.makeCustomAnimation(). Конечно, поскольку это только на Jelly Bean, это практически бесполезно для практических целей.

+5

Это уже не бесполезно :) –

+0

Используйте «ActivityOptionsCompat», если вы нацеливаете pre-JellyBean. –

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