2つのアクティビティAとBがあります。アクティビティAがBを呼び出すときにアニメーションを縮小し、アクティビティBがAを呼び出すときにアニメーションを最大化します。このためにアニメーションxmlファイルは必要ありません。
Androidで別のアクティビティを呼び出すと、デフォルトのアニメーションが提供され、その後、収縮アニメーションが呼び出されます。
私が望むのは、デフォルトのアニメーションが発生せず、必要なアニメーションが発生することです。
別のアクティビティを呼び出すときに、実際にアニメーションを提供できますか?
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)でも機能します。
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);
}
Jelly Beanは、このサポートを ActivityOptions.makeCustomAnimation() メソッドで追加します。もちろん、それはジェリービーンだけにあるので、実用的な目的にはほとんど価値がありません。