アクティビティ遷移でフェードアニメーションを実行するにはどうすればよいですか?


89

ロゴアクティビティとメインアクティビティの間の移行効果を調整していますが、アクティビティが消える前に上部に移動するという問題があります。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

このコードを改善して、消失効果のみを取得するにはどうすればよいですか?

回答:


237

独自の.xmlアニメーションファイルを作成して、新しいファイルをフェードActivityインし、現在のファイルをフェードアウトすることができますActivity

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="500" />

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="1.0" android:toAlpha="0.0"
           android:fillAfter="true"
           android:duration="500" />

そのようなコードでそれを使用してください:(あなたの内部Activity

Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

上記のコードは、現在アクティブなコードをフェードアウトしActivity、新しく開始Activityされたコードをフェードインして、スムーズな移行を実現します。

更新:@Dan Jは、組み込みのAndroidアニメーションを使用するとパフォーマンスが向上することを指摘しました。これは、いくつかのテストを行った後、実際に当てはまることがわかりました。組み込みのアニメーションを使用したい場合は、以下を使用してください。

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

android.R代わりに参照していることに注意してくださいRリソースIDにアクセスする。

更新APIレベル19で導入されTransitionクラスを使用してトランジションを実行するのが一般的な方法になりました。


65
組み込みのAndroidアニメーションを使用すると、移行がスムーズになるoverridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);ようです。これらのファイルを表示すると、カスタムアニメーションを改善する方法のヒントが得られる場合があります(たとえば、フェードインをフェードアウトよりも長くするなど)。
ダンJ

41
それはundescoreがありますoverridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);:)
AlvaroSantisteban

作成時またはすべてのインテントでoverridePendingTransitionを使用する必要がありますか?または私が欲しいものに依存しますか?ありがとう。
リカルド

19
「オーバーライド」しないオプションがあります:Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); startActivity(intent, bundle);
oleynikd 2015年

1
上記の遷移は、開発者向けオプションで有効になっている場合にのみ実行されます。stackoverflow.com/ a / 30422015/2914140を参照してください。
CoolMind 2016

22

シンプルできれいなのでoleynikdによる回答を再投稿するだけです

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
    android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
startActivity(intent, bundle);

overridePendingTransitionは一部の携帯電話では機能せず、Enesのソリューションはあまり良くないため、この答えは正しいはずです。
ヒューゴパソス2017

19

overridePendingTransitionが一部のモバイルで機能しないため、またはデバイスの設定に依存するため、以下のようなonCreateメソッドでアクティビティにアニメーションを追加することもできます。

View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);

1
前のアクティビティまたは親アクティビティのアニメーションを処理する方法は?
メフメト

9
:親アクティビティへの移行バックのためのアニメーションを設定するには、このコードを使用 @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); }
ジョンVerco

15

このコードをstyle.xmlファイルで使用することもできるため、activity.javaに他に何も記述する必要はありません。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>

<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.