How to perform a fade animation on Activity transition?

前端 未结 4 1790
伪装坚强ぢ
伪装坚强ぢ 2020-11-30 20:13

I am codifiying a transition effect between my logo activity and my Main activity, but I have the problem that before vanish the activity move to top:



        
相关标签:
4条回答
  • 2020-11-30 20:34

    you can also add animation in your activity, in onCreate method like below becasue overridePendingTransition is not working with some mobile, or it depends on device settings...

    View view = findViewById(android.R.id.content);
    Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
    mLoadAnimation.setDuration(2000);
    view.startAnimation(mLoadAnimation);
    
    0 讨论(0)
  • 2020-11-30 20:36

    You could create your own .xml animation files to fade in a new Activity and fade out the current 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" />
    

    Use it in code like that: (Inside your Activity)

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

    The above code will fade out the currently active Activity and fade in the newly started Activity resulting in a smooth transition.

    UPDATE: @Dan J pointed out that using the built in Android animations improves performance, which I indeed found to be the case after doing some testing. If you prefer working with the built in animations, use:

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

    Notice me referencing android.R instead of R to access the resource id.

    UPDATE: It is now common practice to perform transitions using the Transition class introduced in API level 19.

    0 讨论(0)
  • 2020-11-30 20:49

    Just re-posting answer by oleynikd because it's simple and neat

    Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
        android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
    startActivity(intent, bundle);
    
    0 讨论(0)
  • 2020-11-30 20:54

    you can also use this code in your style.xml file so you don't need to write anything else in your 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>
    
    0 讨论(0)
提交回复
热议问题