Androidアニメーション--ActivityトランジションアニメーションTransition
4030 ワード
コンテンツ変換
Android 5.0以降、Googleが提供するTransitionフレームワークを使用してActivity間またはFragmentのアニメーション変換効果を実現できます.以前のバージョンでは、ActivityのoverridePendingTransition()とFragmentのsetCustomAnimation()を使用してActivityまたはFragment間のアニメーション切り替えを実現できましたが、ページ全体を一緒にアニメーション変換するだけで、硬く見えますが、Transitionによって、第2のインタフェースの出現方式が第1のインタフェースと一定の関連性を実現することができます.たとえば、2つのインタフェースが同じ要素を視覚的に共有したり、2番目のインタフェースアニメーションの開始位置が最初のページで設定した値に基づいたりします.
Transitionを使用してActivity間のアニメーション変換を行う場合は、まず次の設定が必要です.
// ActivityOptions.makeSceneTransitionAnimation Bundle
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
// TransitionManager , TransitionManager
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transitionには主に終了(exit)、Enter、return、reenterの4つの変換があり、getWindow()を使用して次のように設定できます.
getWindow().setExitTransition(new Fade());
getWindow().setReenterTransition(new Explode());
getWindow().setEnterTransition(new Slide());
getWindow().setReturnTransition(new Fade());
Activity Aを使用してActivity Bを起動するとします.
1.Activity Aの終了変換(ExitTransition)は、AがBを呼び出すとき、AのViewがどのようにアニメーションを再生するかを決定する.2.Activity BのEnterTransitionは、AがBを呼び出すとき、Bの中のViewがどのようにアニメーションを再生するかを決定する.3.Activity Bの戻り変換(ReturnTransition)は、BがAに戻るときに、Bの中のViewがどのようにアニメーションを再生するかを決定する.4.Activity Aの再入力変換(ReenterTransition)は、BがAに戻るときにAの中のViewがどのようにアニメーションを再生するかを決定します.
その後、Fade(フェードアウト)、Explode(分解)、Slide(スライド)など、異なる状態変化で異なる効果を設定することができます.
Activityの設定が入っていないか、アニメーションを終了していない場合、Transitionフレームワークがオンの場合、Fadeアニメーション効果がデフォルトで設定され、入っているか終了しているが、戻ってくるか再入っていない場合は、設定された入っている変換効果が使用され、戻ってくる変換は終了している変換効果が使用されます.
使用するときは、次のコードで変換の開始を行います.
Intent intent = new Intent(MainActivityA.this, MainActivityB.class);
ActivityOptions option = ActivityOptions.makeSceneTransitionAnimation(MainActivityA.this);
startActivity(intent, option.toBundle());
これでプログラムを実行すると、ページの内容が変換されたアニメーションが表示されます.
共有要素変換
Transitionフレームワークは、コンテンツ変換時のアニメーション効果だけでなく、2つのインタフェースで共有要素変換を設定することもできます.
プログラムで共有要素を使用するアニメーションの効果は非常に簡単で、共有する必要がある2つの要素に対して同じtransitionNameを設定し、Activity Options.makeSceneTransitionAnimationでは共有する要素をパラメータとして渡せばよい.
たとえば、Activity AとActivity Bの2つのImageピクチャを共有する必要がある場合は、2つのImageに対してレイアウトファイルで同じtransitionNameを設定するだけです.
android:transitionName="share_image"
共有要素を見つけるには、2つのtransitionNameに同じ名前を付ける必要があります.
共有要素を1つだけ設定する必要がある場合は、Activity Aで次のコードを使用してジャンプします.
Intent intent = new Intent(MainActivityA.this, MainActivityB.class);
ActivityOptions option = ActivityOptions
.makeSceneTransitionAnimation(MainActivityA.this,imageView,"share_image");
startActivity(intent, option.toBundle());
以前のコンテンツ変換と同じ方法を用いていることが分かったが,パラメータに共有されたviewと共有された変換名,すなわち以前に設定されたtransitionNameが多くなっただけである.
複数の共有要素が必要な場合は、Pairを使用します.create()は、次のように作成されます.
ActivityOptions option = ActivityOptions.makeSceneTransitionAnimation(MainActivityA.this,
Pair.create(imageView, "share_image"),
Pair.create(button, "share_button"));
注意しなければならないのはPairです.create()の2つのパラメータ、1つ目のパラメータは共有が必要なView、2つ目のパラメータは共有の名前、すなわちそれぞれのtransitionNameです.使用時にはButtonのような異なるviewに対してImageViewはPairとして強くなる必要があることが分かった.create()の最初のパラメータ.