Enfin obtenu un moyen de contourner le problème, le bonne façon de le faire est setFillAfter(true)
,
si vous souhaitez définir votre animation en XML, alors vous devriez faire quelque chose comme ça
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fillAfter="true">
<translate
android:fromXDelta="0%"
android:toXDelta="-100%"
android:duration="1000"/>
</set>
vous pouvez voir que je l'ai défini filterAfter="true"
dans le set
tag, si vous essayez de le définir dans translate
tag cela ne fonctionnera pas, pourrait être un bug dans le cadre !!
puis dans le Code
Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide_out);
someView.startAnimation(anim);
OU
TranslateAnimation animation = new TranslateAnimation(-90, 150, 0, 0);
animation.setFillAfter(true);
animation.setDuration(1800);
someView.startAnimation(animation);
alors il va sûrement travailler !! Maintenant, c'est un peu difficile, il semble que la vue se déplace réellement à la nouvelle position, mais en fait les pixels de la vue sont déplacés, c'est-à-dire que votre vue est réellement à sa position initiale mais pas visible. avez-vous appuyer sur un bouton ou une vue cliquable dans votre vue (dans mon cas dans la mise en page), de fixer que vous devez déplacer manuellement votre point de vue/mise en page à la nouvelle position
public TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
new TranslateAnimation(-90, 150, 0, 0);
maintenant que nous pouvons voir que notre animation commence à partir de -90 x-axe à 150 x-axe
alors ce que nous faisons est
someView.setAnimationListener(this);
et
public void onAnimationEnd(Animation animation)
{
someView.layout(150, 0, someView.getWidth() + 150, someView.getHeight());
}
maintenant laissez-moi vous expliquer public void layout (int left, int top, int right, int botton)
se déplace votre mise en page à nouveau premier argument de position définir la gauche, que nous est , parce que traduire l'animation a animé notre avis à 150 x-axe, top est 0 parce que nous n'avons pas animé y-axe, maintenant en droit nous avons fait someView.getWidth() + 150
fondamentalement nous obtenons la largeur de notre vue et ajouté parce que nous notre gauche est maintenant passer à 150 x-axe pour faire de la largeur de la vue à son origine, et le bas est égal à la hauteur de notre vue.
Je vous souhaite maintenant les gens ont compris le concept de traduction, et encore vous avez des questions que vous pouvez poser tout de suite dans la section commentaire, je me sens le plaisir d'aider :)
EDIT Ne pas utiliser layout()
méthode comme il peut être appelé par le cadre quand jamais la vue est invalidée et que vos changements ne se verront pas, utilisez LayoutParams
pour définir vos paramètres de disposition en fonction de vos besoins
ah ha! exactement ce dont j'avais besoin. Merci! – LoneWolfPR
Mais que dois-je faire si le même doit glisser. puisque ce n'est pas réellement déplacé alors comment puis-je glisser dans l'objet que j'ai slideOut ??? – Ads
Même si vous faites * permeneny * déplacer votre 'View' dans' onAnimationEnd() 'il clignote **. Vérifiez: http://stackoverflow.com/questions/2650351/android-translateanimation-resets-after-animation –