J'utilise des animations pour entrer ou sortir de l'activité. Entrer dans une animation fonctionne bien, mais quitter une animation ne fonctionne pas bien. Je commence l'animation de sortie lorsque j'appuie sur le bouton Précédent. Que se passe-t-il si vous commencez par entrer dans l'animation pour l'activité en cours, puis affichez la dernière activité, ce que je veux une animation de sortie simple en appuyant sur le bouton Précédent?.
Slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="0%p"
Android:toXDelta="-100%p" >
</translate>
Slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="100%p"
Android:toXDelta="0%p" >
</translate>
Activé le bouton de retour de la barre d'action enfoncé
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.home:
finish();
overridePendingTransition(R.anim.slide_out, R.anim.slide_in);
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
J'ai utilisé Slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="100%"
Android:toXDelta="0%" >
</translate>
slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="0%"
Android:toXDelta="-100%" >
</translate>
slide_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="-100%"
Android:toXDelta="0%" >
</translate>
slide_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="0%"
Android:toXDelta="100%" >
</translate>
Code
Intent i=new Intent(Authentication.this,Login.class);
startActivity(i);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
Au précédent
finish();
overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
Commencez par créer une animation supplémentaire, à savoir Nothing.xml, dans votre dossier anim
rien.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="0%"
Android:toXDelta="0%" >
</translate>
voici votre slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="-100%"
Android:toXDelta="0%" >
</translate>
et slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromXDelta="0%"
Android:toXDelta="100%" >
</translate>
Appelez maintenant votre NewActivity comme ceci
startActivity(new Intent(CurrentActivity.this, NewActivity.class));
overridePendingTransition(R.anim.slide_in, R.anim.nothing);
puis sur votre bouton retour cliquez dessus
finish();
overridePendingTransition(R.anim.nothing, R.anim.slide_out);
Ajouter une animation dans onBackPressed
, il affichera l'animation en cliquant sur le bouton Précédent.
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}
J'ai fait quelque chose de similaire et cela fonctionne bien, vous pouvez modifier animate () avec startAnimation (your_xml), vous devrez également rendre l'activité transparente en arrière-plan:
<item name="Android:windowBackground">@Android:color/transparent</item>
Cette activité glissera vers le bas et l’activité principale sera visible au moment du glissement en raison de l’arrière-plan transparent. EDIT - avec le bouton Précédent de la barre d’outils:
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mainlinear.animate()
.translationY(ScUtils.getScreenHeight(getApplicationContext()))
.setDuration(210)
.setInterpolator(new AccelerateInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
ThemeActivity.super.onBackPressed();
overridePendingTransition(0, 0);
}
}).start();
}
});
Pour l'activité, entrez animation, utilisez overridePendingTransition(R.anim.slide_out, R.anim.slide_in);
dans la fonction onCreate(...)
.
Pour l’animation de sortie, passez le même appel dans onPause(...)
.
J'avais un bouton Précédent/Accueil sur ma barre d'action qui ne relevait pas l'animation de la diapositive en remplaçant onBackPressed
ou finish
. J'ai donc dû ajouter cet extrait de ici . Si vous utilisez les mêmes slide_enter
et slide_exit
que ci-dessus:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch(id) {
// back button
case Android.R.id.home:
finish();
overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
return true;
}
return super.onOptionsItemSelected(item);
}
Au cas où quelqu'un le jugerait utile.