web-dev-qa-db-ja.com

Activity Transitionでフェードアニメーションを実行する方法は?

ロゴアクティビティとメインアクティビティの間の移行効果をコード化していますが、アクティビティが消滅する前にトップに移動するという問題があります。

<?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>

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

79
MarcForn

独自の。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をフェードインして、スムーズな移行を実現します。

UPDATE:@Dan Jは、組み込みのAndroidアニメーションを使用すると改善することを指摘しましたperformance。テストを行った後、実際にそうなることがわかりました。組み込みのアニメーションを使用する場合は、次を使用します。

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

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

UPDATE:現在、 APIレベル19で導入された遷移クラス を使用して遷移を実行することが一般的です。

211
Philipp Jahoda

また、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);
18
Enes

再投稿するだけ oleynikd で答える

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

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>
12
Refnhaldy

SetContentViewの直後に次の行を追加します。

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

アクティビティにフェードインとフェードアウトのアニメーションを追加します。アニメーションは既にAndroidシステムによって提供されているため、再作成する必要はありません。

それがあなたを助けることを願っています:)

0
Neo