Activity transition(Activity回転アニメーション効果)

12041 ワード

参照先:
Android5.0のActivityのターンオーバーアニメーション
Material Designの低バージョン互換実装(5)-Activity OptionsCompat

システム内蔵の一般的なターンテーブルアニメーション:

//                StartActivity()   finish()                 
                Intent intent = new Intent(MainActivity.this, MainActivityI.class);
                startActivity(intent);
                overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

Android5.0ターンフィールドアニメーション


1、ActivityOptionsCompat.makeCustomAnimation(context, enterResId, exitResId)


カスタムアニメーションを簡単に作成します.このパラメータは簡単です.入ったアニメーションのidを入力し、アニメーションのidを削除すればいいです.
類似:overridePendingTransition.
// :overridePendingTransition(R.anim.slide_bottom_in, R.anim.slide_bottom_out);
// overridePendingTransition
ActivityOptionsCompat options = ActivityOptionsCompat.makeCustomAnimation(MainActivity.this,
                        R.anim.slide_bottom_in, R.anim.slide_bottom_out);
Intent intent = new Intent(MainActivity.this, MainActivityI.class);
startActivity(intent, options.toBundle());

2、ActivityOptionsCompat.makeScaleUpAnimation(source, startX, startY, startWidth, startHeight)


これは4.x上で有用であり,ある固定座標からあるサイズで全画面に拡大する新しいActivityを実現できる.
アルバムには良い展示効果です.
// Activity ( activity ) 
ActivityOptionsCompat options = ActivityOptionsCompat.makeScaleUpAnimation(btn2,
                        btn2.getWidth() / 2, btn2.getHeight() / 2, // 
                        0, 0);// , (0,0) 
Intent intent = new Intent(MainActivity.this, MainActivityI.class);
startActivity(intent, options.toBundle());

3、ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElement, sharedElementName)


現在のインタフェースの要素と新しいインタフェースの要素を関連付ける必要がある場合は、このアニメーションを使用します.
1、共有要素がない:
開始activity:
                ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this);
                Intent intent = new Intent(MainActivity.this, MainActivityI.class);
                startActivity(intent, optionsCompat.toBundle());

2番目のactivity:
public class MainActivityI extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        // 
        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maini);

//         
        Slide slide = new Slide();
        slide.setDuration(2000);
        getWindow().setExitTransition(slide);// 1 
        getWindow().setEnterTransition(slide);// 

//         
//        Explode explode = new Explode();
//        explode.setDuration(2000);
//        getWindow().setExitTransition(explode);// 
//        getWindow().setEnterTransition(explode);// 

//         
//        Fade fade = new Fade();
//        fade.setDuration(2000);
//        getWindow().setExitTransition(fade);// 
//        getWindow().setEnterTransition(fade);// 
    }


}

2、共有要素があります.
①レイアウトで共有する要素にandroid:transitionName="mybtn 1":
  

②activityで
                Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, btn2, "mybtn1").toBundle();
                Intent intent = new Intent(MainActivity.this, MainActivityI.class);
                startActivity(intent, bundle);

パラメータbtn 2:1番目と2番目のactivityの共有要素(そのButton)を表し、パラメータ「mybtn 1」:レイアウトファイルのtransitionAnimationプロパティの値を表します.
2番目のactivityで
①レイアウトで共有されている要素にandroidを追加する:transitionName:
注:transitionName名は対応し、同じにします.
    

②activityでは何もしない
3、複数の共有要素がある:
2つのページに複数の共有要素がある場合はどうすればいいですか?Android:transitionNameプロパティは上記のように設定されており、Activityを起動するときにPairを使用できます.createメソッドを使用して、複数の共有要素を設定します.
開始activity:
①レイアウトで共有されている要素にandroid:transitionName属性を追加し、名前をカスタマイズします.
        

②activityで
Bundle bundle = ActivityOptions
    .makeSceneTransitionAnimation(MainActivity.this, 
     Pair.create(((View) btn2), "mybtn1"), 
     Pair.create(((View) btn3), "mybtn2"))
    .toBundle();
Intent intent = new Intent(MainActivity.this, MainActivityI.class);
startActivity(intent, bundle);

Pair.createメソッドには2つのパラメータがあり、1つ目は共有要素のインスタンス(ビュータイプの場合に注意)であり、2つ目のパラメータはそのビューのtransitionAnimation属性の値である.
2番目のactivityで
①レイアウトで共有されている要素にandroidを追加する:transitionName:
注:transitionName名は対応し、同じにします.
    

②activityでは何もしない