Androidで別のアクティビティを呼び出すときにアニメーションを提供するにはどうすればよいですか?


115

2つのアクティビティAとBがあります。アクティビティAがBを呼び出したときにアニメーションを縮小し、アクティビティBがAを呼び出したときにアニメーションを最大化したいのですが、アニメーションxmlファイルは必要ありません。

Androidで別のアクティビティを呼び出すと、デフォルトのアニメーションが表示され、次に縮小アニメーションが呼び出されます。

私が欲しいのは、デフォルトのアニメーションが発生するのではなく、必要なアニメーションが発生することです。

別のアクティビティを呼び出すときに、実際にアニメーションを提供できますか?

回答:


144

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以上を対象とするアプリには、Activities overridePendingTransitionメソッドがあります。着信アニメーションと発信アニメーションには2つのリソースIDが必要です。のidは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 2011

同じ質問があります。おそらくonResumeとonPauseの開始アニメーションで。
ティマ

代わりにAnimatorを使用する方法はありますか?
Android開発者

また、finish()を呼び出した後にも使用できます。
thiagolr 2015

R.anim.fade_inまだ想定しているxmlファイルのアニメーションではありませんres\anim か?
Alex Jolig 2015

78

これを行うには、OverridePendingTransitionメソッドを使用する必要があります。これは、Activityクラスにあります。apidemosサンプルのres / animフォルダーにあるサンプルアニメーション。確認してください。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からサポートする必要があります。あるアクティビティから別のアクティビティにアニメーションを提供する他の方法はありますか?
10

5
驚くばかり!これは遊ぶのがとても楽しいです
誰か誰かどこか

@sunil私はyoursと同じ質問があります。問題を解決できますか?APIレベル3または4(5ではなく)のアニメーション
Dr.jacky

onResume()にアニメーションコードを保持すると、ユーザーがアプリの外に出て戻ってきたときにアニメーションが再生されます。多くのアプリでは理想的ではありません。
Vihaan Verma

私は追加する必要がsuper.onResume();なっていた、:「android.util.SuperNotCalledException:アクティビティ{com.abc.MyActivityは} super.onResume()に通じ呼び出していませんでした」
ジーンボー


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.