Jak zapewnić animację podczas wywoływania innej aktywności w systemie Android?

Mam dwie czynności A I B. chcę mieć animację shrink gdy Aktywność A wywołuje B i maksymalizuje animację, gdy aktywność B wywołuje A. nie potrzebuję do tego animowanych plików xml.

Kiedy wywołujemy inną aktywność w Androidzie, daje ona domyślną animację, a następnie wywołuje animację skurczową.

Chcę, aby nie wystąpiła domyślna animacja, a powinna wystąpić animacja, którą chcę.

Czy rzeczywiście możemy dać animację, gdy dzwonisz do innej aktywności?

Author: Alex Lockwood, 2010-04-16

4 answers

Od API 16 możesz dostarczyć pakiet opcji aktywności podczas wywoływania kontekstu .startActivity (Intent, Bundle) lub pokrewne metody. Jest on tworzony poprzez activityoptions builder:

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());

Nie zapomnij sprawdzić inne metody activityoptions builder i ActivityOptionsCompat Jeśli używasz biblioteki wsparcia.



API 5+:

Dla aplikacji kierujących API na poziomie 5+ jest Działalność overridePendingTransition metoda. Animacje przychodzące i wychodzące wymagają dwóch identyfikatorów zasobów. Id 0 wyłączy animacje. Zadzwoń natychmiast po wywołaniu startActivity.

Czyli:

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

API 3+:

Możesz zapobiec domyślnej animacji (wsuwanej z prawej strony) za pomocą znacznika Intent.FLAG_ACTIVITY_NO_ANIMATION.

Czyli:

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

Następnie w swojej aktywności musisz po prostu określić własną animację.

To także działa dla API 1.5 (Poziom 3).

 145
Author: whlk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 13:40:39

Aby to osiągnąć, musisz użyć metody OverridePendingTransition, która znajduje się w klasie aktywności . Przykładowe animacje w przykładowym folderze res/anim apidemos. Sprawdź to. Więcej niż sprawdź demo w ApiDemos/App/Activity / animation .

Przykład:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}
 78
Author: Praveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-19 17:10:52

Napisał samouczek, dzięki któremu możesz animować swoją aktywność,

Enjoy:

Http://blog.blundellapps.com/animate-an-activity/

 29
Author: Blundell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 07:45:44

Jelly Bean dodaje wsparcie dla tego z Activioptions.metoda makeCustomAnimation () . Oczywiście, ponieważ jest tylko na Jelly Bean, jest prawie bezwartościowy do celów praktycznych.

 3
Author: phreakhead,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-30 23:14:00