Comment définir la transition entre deux activités pour Android 1.5 et versions ultérieures? J'aimerais qu'une activité disparaisse.
193
Comment définir la transition entre deux activités pour Android 1.5 et versions ultérieures? J'aimerais qu'une activité disparaisse.
overridePendingTransition
réponses ci-dessous: Vous pouvez réussir(0, 0)
si vous ne voulez aucune animation.Réponses:
Vous pouvez le faire avec
Activity.overridePendingTransition()
. Vous pouvez définir des animations de transition simples dans un fichier de ressources XML.la source
onCreate
fonction de votre activité .Voici le code pour effectuer un bon fondu en douceur entre deux activités.
Créez un fichier appelé
fadein.xml
dansres/anim
<?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="2000" />
Créez un fichier appelé
fadeout.xml
dansres/anim
<?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:duration="2000" />
Si vous voulez effacer de l' activité A à l' activité B , mettre ce qui suit dans la
onCreate()
méthode de l' activité B . AvantsetContentView()
travaille pour moi.overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Si les fondus sont trop lents pour vous, remplacez
android:duration
les fichiers xml ci-dessus par quelque chose de plus petit.la source
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
visualisation de ces fichiers peut également vous donner des conseils sur la façon d'améliorer vos animations personnalisées (par exemple, en prolongeant la durée du fondu avant).fadein
etfadeout
defade_in
etfade_out
. From Dan J's postoverridePendingTransition()
juste après avoir appeléfinish()
et / oustartActivity()
. J'ai pu obtenir un joli fondu de cette façon en l'appelant juste après le lancement de la nouvelle activité.Un moyen encore plus simple de le faire est:
C'est ça :)
la source
Oui. Vous pouvez indiquer au système d'exploitation le type de transition que vous souhaitez avoir pour votre activité.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setWindowAnimations(ANIMATION); ... }
Où ANIMATION est un entier faisant référence à une animation intégrée dans le système d'exploitation.
la source
créer res> anim> fadein.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" />
créer res> anim> fadeout.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:duration="500" />
Dans res> values> styles.xml
<style name="Fade"> <item name="android:windowEnterAnimation">@anim/fadein</item> <item name="android:windowExitAnimation">@anim/fadeout</item> </style>
Dans les activités surCréer ()
la source
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Pour une liste des animations par défaut, voir: http://developer.android.com/reference/android/R.anim.html
Il existe en fait
fade_in
etfade_out
pour les API de niveau 1 et plus.la source
J'écrase mon animation d'activité par défaut. Je le teste dans l'API 15 pour qu'il fonctionne correctement. Voici la solution que j'utilise:
<!-- 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/colorPrimary</item> <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> </style> <style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> </style>
Créez un dossier anim sous le dossier res, puis créez ces quatre fichiers d'animation:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> </set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="@android:integer/config_mediumAnimTime"/> </set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> </set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="@android:integer/config_mediumAnimTime"/> </set>
Vous pouvez télécharger mon exemple de projet .
C'est tout... :)
la source
Voici le code pour faire une belle fluidité entre deux activités.
effet lisse de gauche à droite
Créez un fichier appelé slide_in_right.xml et slide_out_right.xml dans res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" /> <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/> <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>
effet lisse de droite à gauche
Créez un fichier appelé animation_enter.xml et animation_leave.xml dans res / anim
animation_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700"/> </set>
animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700" /> </set>
Naviguez d'une activité à une seconde activité
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class); overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right); startActivity(intent_next); finish();
4. sur l'événement de presse de retour ou naviguer d'une deuxième activité à une activité
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class); overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave); startActivity(home_intent); finish();
la source
overridePendingTransition
immédiatement après startActivity: developer.android.com/reference/android/app/…Vous ne pouvez pas utiliser overridePendingTransition dans Android 1.5. overridePendingTransistion est venu à Android 2.0.
Si vous voulez passer par là sans aucune erreur, vous devez compiler pour la cible (1.5 ou supérieure) en utilisant les animations ordinaires (ou que vous possédez) ou vous devez compiler pour la cible (2.0 ou supérieure) en utilisant overridePendingTransistion.
Résumé: vous ne pouvez pas utiliser overridePendingTransistion dans Android 1.5 .
Vous pouvez cependant utiliser les animations intégrées dans le système d'exploitation.
la source
Appareils IN GALAXY:
Vous devez vous assurer que vous ne l'avez pas désactivé sur l'appareil à l'aide des paramètres> Options du développeur:
la source
Avant de commencer votre intention:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this); startActivity(intent, options.toBundle());
Cela donne une animation par défaut à votre transition d'activité.
la source
Utilisez l'API ActivityCompat.startActivity () works> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE); ActivityCompat.startActivity(activity, intent, options.toBundle());
la source
Certaines versions d'Android prennent en charge les
Activity
transitions personnalisées et d'autres non (appareils plus anciens). Si vous souhaitez utiliser des transitions personnalisées, il est recommandé de vérifier si leActivity
a laoverridePendingTransition()
méthode, comme sur les anciennes versions, ce n'est pas le cas.Pour savoir si la méthode existe ou non, l'API de réflexion peut être utilisée. Voici le code simple qui vérifiera et retournera la méthode si elle existe:
Method mOverridePendingTransition; try { mOverridePendingTransition = Activity.class.getMethod( "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } ); /* success */ } catch (NoSuchMethodException nsme) { /* failure, this version of Android doesn't have this method */ }
Et puis, nous pouvons appliquer notre propre transition, c'est-à-dire utiliser cette méthode si elle existe:
if (UIConstants.mOverridePendingTransition != null) { try { UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
Ici, à titre d'exemple, de simples animations de fondu d'entrée et de sortie ont été utilisées pour la démonstration de transition.
la source
zoom arrière animation
Intent i = new Intent(getApplicationContext(), LoginActivity.class); overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); startActivity(i); finish();
zoom_enter
<?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" />
zoom_exit
<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" />
la source