web-dev-qa-db-ja.com

Androidで別のアクティビティを呼び出すときにアニメーションを提供する方法は?

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

Androidで別のアクティビティを呼び出すと、デフォルトのアニメーションが提供され、その後、収縮アニメーションが呼び出されます。

私が望むのは、デフォルトのアニメーションが発生せず、必要なアニメーションが発生することです。

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

112
sunil

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 メソッドがあります。着信および発信アニメーション用に2つのリソースIDが必要です。 0というIDは、アニメーションを無効にします。 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)でも機能します。

138
whlk

Activity class にあるOverridePendingTransitionメソッドを使用して、これを達成する必要があります。 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);
}
78
Praveen

チュートリアルを書いて、アクティビティの内外をアニメートできるようにします。

楽しい:

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

29
Blundell

Jelly Beanは、このサポートを ActivityOptions.makeCustomAnimation() メソッドで追加します。もちろん、それはジェリービーンだけにあるので、実用的な目的にはほとんど価値がありません。

3
phreakhead