2

j'ai réussi à retirer un droit à la diapositive à gauche dans mon activité facilement en utilisant cette animation R.anim.anim_left_to_right:overridePendingTransition: droit à glisser vers la gauche avec la profondeur dans l'activité

<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="300"/> 
</set> 

Dans Activité A, je l'emportaient sur la pendingTransition:

 overridePendingTransition(R.anim.anim_left_to_right, 0); 

dans Activité B, dans la méthode onBackPressed, je l'emportaient sur la pendingTransition comme ceci:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    overridePendingTransition(0, R.anim.anim_right_to_left); 

} 

Le R.anim.anim_right_to_left ressemble à ceci:

<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="300" /> 
</set> 

Le problème avec ce type d'animation est que l'animation entre l'activité A et B est très plat - Activité B roule littéralement sur l'activité A et il n'y a la profondeur de l'activité. Je veux atteindre un certain type de profondeur lorsque l'activité est en transition, où l'activité A en cours passera en arrière-plan et l'activité B glissera au-dessus à mesure qu'elle évolue. Lorsque vous quittez l'activité B, l'activité B devrait glisser vers la gauche et l'activité A passer à la taille normale.

Une vidéo de Google montre en fait cela sur ViewPager mais je WNAT pour faire un effet similaire pour * Activité **:

http://developer.android.com/training/animation/anim_page_transformer_depth.mp4

J'ai essayé de mettre cela en Activité A:

 overridePendingTransition(R.anim.anim_left_to_right, R.anim.anim_scale_out); 

Et cela dans Activité B:

overridePendingTransition(R.anim.anim_scale_in, R.anim.anim_right_to_left); 

R.anim.anim_scale_out:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
     <scale android:fromXScale="1.0" 
      android:fromYScale="1.0" 
      android:toXScale="0.8" 
      android:toYScale="0.8" 
      android:duration="300" 
      android:fillBefore="false" /> 
</set> 

R.anim.anim_scale_in:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
     <scale android:fromXScale="0.8" 
      android:fromYScale="0.8" 
      android:toXScale="1" 
      android:toYScale="1" 
      android:duration="300" 
      android:fillBefore="false" /> 

</set> 

encore l'animation ne me donne pas la profondeur de l'activité. Lorsque vous passez de l'activité A à l'activité B, j'ai besoin de réduire l'activité A et de faire glisser l'activité B de droite à gauche. Lorsque je vais de l'activité B à A, je veux que l'activité B glisse de gauche à droite et que l'activité A soit agrandie.

+0

vous pouvez utiliser la classe Transition pour la transition d'activité mais il est ajouté dans API 19 et également d'autres transition comme Fade, Explode et Slide mais ils sont ajoutés dans API 21 vérifier ce lien [link] (http: // xmodulo. com/activité-transition-animations-android.html) ce n'est peut-être pas la solution que vous recherchez. –

+0

Ce n'est malheureusement pas la réponse que je cherche. Mon application cible jusqu'à 16 api. Je ne comprends pas pourquoi cet effet est si difficile à faire parce qu'il est utilisé dans beaucoup d'applications. Si vous regardez l'application Facebook, vous pouvez voir cet effet si vous passez d'une activité à une autre. – Simon

Répondre

0

Vous devez combiner l'animation de traduction et l'animation d'échelle. La balise "set" peut avoir plusieurs sous-éléments de différents types d'animations. Ecrivez ces deux types d'animations dans un fichier xml.Il fonctionnera.

+0

Oui, je le sais et j'ai déjà essayé, mais ça ne semble pas fonctionner. Pouvez-vous s'il vous plaît démontrer avec le code? – Simon

+0

Oui, voici le code XML. Et j'ai essayé, ça marche bien. Entrer l'animation: – wngxao

0

Oui, voici le code XML. Et j'ai essayé, ça marche bien. entrer animation:

<translate 
     android:duration="1000" 
     android:fromXDelta="100%p" 
     android:toXDelta="0" 
     /> 
    <scale android:fromXScale="0.8" 
      android:fromYScale="0.8" 
      android:toXScale="1" 
      android:pivotX="50%p" 
      android:pivotY="50%p" 
      android:toYScale="1" 
      android:duration="1000" /> 
</set> 

exit animation: 
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true"> 

    <translate 
     android:duration="1000" 
     android:fromXDelta="0" 
     android:toXDelta="-100%p" 
     /> 
    <scale android:fromXScale="1.0" 
      android:fromYScale="1.0" 
      android:toXScale="0.8" 
      android:pivotX="50%p" 
      android:pivotY="50%p" 
      android:toYScale="0.8" 
      android:duration="1000" /> 
</set> 

Si cela ne fonctionne pas pour you.I peut envoyer un courriel à mon projet de chance you.Good.

+0

Vous ne comprenez pas ma question - Je ne veux pas que l'activité d'entrée soit à l'échelle ET traduise en même temps. S'il vous plaît relisez ma question. L'activité A doit évoluer et l'activité B doit être traduite. Avez-vous regardé le lien vers la vidéo par google pour voir l'effet que je veux atteindre? – Simon

0

en dessous du codage XML fonctionne bien.essayez cette

bas dans

<translate 
    android:fromYDelta="100%p" 
    android:toYDelta="0" 
    android:duration="500"/> 

top sur

<translate 
    android:fromYDelta="0" 
    android:toYDelta="-100%p" 
    android:duration="500"/> 

diapositive gauche:

<translate 
    android:duration="400" 
    android:fromXDelta="-100%" 
    android:toXDelta="0%"/> 

<alpha 
android:duration="400" 
android:fromAlpha="0.0" 
android:toAlpha="1.0"/> 

diapositive droite:

<translate 
    android:duration="400" 
    android:fromXDelta="100%" 
    android:toXDelta="0%"/> 
<alpha 
    android:duration="400" 
    android:fromAlpha="0.0" 
    android:toAlpha="1.0"/> 

0

mettre ces fichiers dans le dossier anim:

slide_in_left:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="true"> 
    <translate android:fromXDelta="-100%" 
     android:toXDelta="0%" android:fromYDelta="0%" 
     android:toYDelta="0%" android:duration="300"> 
    </translate> 
</set> 

slide_in_right:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="50%p" android:toXDelta="0" 
      android:duration="@android:integer/config_mediumAnimTime"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
      android:duration="@android:integer/config_mediumAnimTime" /> 
</set> 

slide_out_left:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-50%p" 
      android:duration="@android:integer/config_mediumAnimTime"/> 
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" 
      android:duration="@android:integer/config_mediumAnimTime" /> 
</set> 

slide_out_right:

<?xml version="1.0" encoding="utf-8"?> 
<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="0"> 
    </translate> 
</set> 

Et puis pour l'ouverture et l'activité de clôture utiliser l'animation appropriée comme:

overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); 

Modifier

Maintenant, l'animation que vous voulez en utilisant l'échelle est ici:

scale_in.xm l

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <scale android:fromXScale="1.0" 
     android:fromYScale="1.0" 
     android:toXScale="0.8" 
     android:toYScale="0.8" 
     android:duration="500" 
     android:fillBefore="false" /> 
</set> 

scale_out:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <scale android:fromXScale="1.0" 
     android:fromYScale="1.0" 
     android:toXScale="1.0" 
     android:toYScale="1.0" 
     android:duration="500" 
     android:fillBefore="false" /> 
</set> 

left_to_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%" 
     android:toXDelta="0%" 
     android:fromYDelta="0%" 
     android:toYDelta="0%" 
     android:duration="500"/> 
</set> 

right_to_left:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate 
     android:fromXDelta="-100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500" /> 
</set> 

et de les utiliser comme:

Activité A à B ->

overridePendingTransition(R.anim.left_to_right, R.anim.slide_out); 

Activité B à A ->

overridePendingTransition(R.anim.right_to_left,R.anim.slide_in); 

vous pouvez également modifier la durée de l'animation selon vos besoins.

+0

Vous utilisez l'alpha et non l'échelle. – Simon

+0

@Simon mais cela fonctionne bien. Je peux vous fournir du code pour l'échelle aussi. –

+0

Veuillez regarder le lien vidéo que j'ai posté ci-dessus et essayez de faire fonctionner votre code pour que l'animation ressemble à ça. – Simon