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()の最初のパラメータ.