web-dev-qa-db-fra.com

Comment effectuer une animation en fondu sur la transition d'activité?

Je suis en train de codifier un effet de transition entre l’activité de mon logo et mon activité principale, mais j’ai le problème qu’avant que l’activité disparaisse, il faut placer en haut:

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

Comment puis-je améliorer ce code pour obtenir uniquement un effet de disparition?

79
MarcForn

Vous pouvez créer vos propres fichiers d’animation .xml pour créer un nouveau fondu Activity et un fondu du Activity actuel:

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" />

Utilisez-le dans un code comme celui-ci: (Dans votre Activity)

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

Le code ci-dessus supprimera progressivement le Activity actuellement actif et le Activity nouvellement démarré, ce qui permettra une transition en douceur.

[~ # ~] mise à jour [~ # ~] : @Dan J a souligné que l'utilisation de la fonction intégrée Android animations améliore les performances , ce que j’ai trouvé être le cas après quelques tests. Si vous préférez utiliser les animations intégrées, utilisez:

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

Avis moi référençant Android.R au lieu de R pour accéder à l'ID de la ressource.

[~ # ~] update [~ # ~] : Il est maintenant courant d'exécuter des transitions à l'aide de la classe Transition introduite au niveau de l'API 19 .

211
Philipp Jahoda

vous pouvez également ajouter une animation à votre activité, dans la méthode onCreate comme ci-dessous, car overridePendingTransition ne fonctionne pas avec certains mobiles, ou cela dépend des paramètres de l'appareil ...

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

Il suffit de re-poster répondez par oleynikd parce que c'est simple et soigné

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

vous pouvez également utiliser ce code dans votre fichier style.xml, de sorte que vous n'avez pas besoin d'écrire autre chose dans votre fichier 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

Mettez la ligne ci-dessous juste après votre setContentView:

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

Cela ajoutera l'animation en fondu enchaîné à votre activité. Les animations sont déjà données par le système Android, il n'est donc pas nécessaire de les recréer.

J'espère que ça vous aidera :)

0
Neo