web-dev-qa-db-ja.com

Android Support v4を使用した最新のアクティビティ遷移Android L

アプリのマテリアルデザインを実装していました。ここだけでアクティビティ間を移行できることがわかりました: http://Android-developers.blogspot.com.es/2014/10/implementing-material-design-in-your.html

だから私は「本物の動き」セクションが言うことをフォローしようとしました:

ActivityMain.Java

Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
…
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
    albumCoverImageView,   // The view which starts the transition
    transitionName    // The transitionName of the view we’re transitioning to
    );
ActivityCompat.startActivity(activity, intent, options.toBundle());

activity_main.xml

<ImageView
    …
    Android:transitionName="@string/transition_album_cover" />

activity_details.xml

<ImageView
    …
    Android:transitionName="@string/transition_album_cover" />

ただし、これによりデフォルトのAndroid=アクティビティが遷移し、アニメーションは表示されません。

ここで言うように、私はrequestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS)を呼び出したことに注意してください http://developer.Android.com/reference/Android/support/v4/app/ActivityOptionsCompat.html#makeSceneTransitionAnimation(Android.app。アクティビティ 、Android.view.View、Java.lang.String)

また、これはすべてNexus4 APIレベル19でテストされました

問題はどこだ?

16
BamsBamx

ActivityOptionsCompat.makeSceneTransitionAnimationは、APIレベル> = 21でのみ機能します。From docs

マテリアルテーマやカスタムアクティビティの遷移など、一部のマテリアルデザイン機能はAndroid 5.0(APIレベル21)以上でのみ利用できます。ただし、実行時にこれらの機能を利用するようにアプリをデザインできます。マテリアルデザインをサポートし、Androidの以前のリリースを実行しているデバイスと互換性があるデバイス。

以下がその定義です。

public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity,
        View sharedElement, String sharedElementName) {
    if (Build.VERSION.SDK_INT >= 21) {
        return new ActivityOptionsCompat.ActivityOptionsImpl21(
                ActivityOptionsCompat21.makeSceneTransitionAnimation(activity,
                        sharedElement, sharedElementName));
    }
    return new ActivityOptionsCompat();
}

では、なぜその方法はサポートパッケージに存在するのでしょうか。

古いバージョン(APIレベル<= 20)との下位互換性を維持するために行われます。 互換性ドキュメントの維持 から:

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    // Call some material design APIs here
} else {
    // Implement this feature without material design
}
30
Manish Mulimani

アクティビティの移行はAndroid 5.0。ActivityOptionsCompat. makeSceneTransitionAnimationは、19以下を実行している場合は何もしません。

7
klmprt