Comment animer un point de Vue de la traduction
Au premier clic d'un bouton, j'ai envie de faire glisser un View
le long de l'axe des x (par 200 pixels vers la droite, disons). Et sur la deuxième pression sur le bouton, j'ai envie de faire glisser le View
en arrière le long de l'axe des x à sa position d'origine.
La View.setTranslationX(float)
méthode sauts la Vue de la cible horizontale des endroits avec des appels myView.setTranslationX(200);
et myView.setTranslationX(0);
respectivement. Quelqu'un sait comment je peux diapositive la View
à la cible horizontale emplacements?
Note 1: Un
TranslateAnimation
n'est pas bon car il ne fait pas les déplacer
leView
mais présente seulement l'illusion de la déplacer.Note 2: je n'ai pas pris le temps de poser la question qui le
setTranslationX(float)
etsetTranslationY(float)
méthodes ont été introduites comme des API de Niveau 11. Si vous ciblez en Nid d'abeille de l'API (Niveau 11) vers le haut, puis Gautam K réponse suffit. Sinon, voir ma réponse pour une proposition de solution.
Vous devez vous connecter pour publier un commentaire.
Essayez de regarder dans ObjectAnimator et de sa super-classe de la Valeur de l'Animateur
vous pouvez faire quelque chose comme ceci
ObjectAnimator anim = ObjectAnimator.ofFloat(this, "translationX", 0,200);
et puis
anim.start();
Utiliser un
boolean
de la valeur et de l'activer avec200,0
dans l'objet de l'animateur à glisser vers l'arrièrePS: vous pouvez utiliser
setDuration
méthode pour définir la durée de l'animation devrait prendre pour se terminerEdit :
Essayer de regarder les bibliothèque de prise en charge qui offre une compatibilité descendante.
Modifier
Comme @AdilHussain souligne qu'il y est une bibliothèque appelée nineoldandroids qui peut être utilisé pour le même but sur les anciens androïdes.
jar
à partir d'ici: https://github.com/JakeWharton/NineOldAndroids/downloadsCela m'avait perplexe pour un juste quelques jours (à la faire fonctionner pré - Sandwich à la Crème Glacée), mais je pense que j'ai enfin là! (merci à Gautam K et Mike Israël pour les fils) Ce que j'ai fait à la fin était de prolonger mon
View
(unFrameLayout
) pour commencer à le traduire droite/gauche animations, comme l'exige et à écouter pour la fin des animations afin de déménager monFrameLayout
droite/gauche comme il convient, comme suit:Et, enfin, de faire glisser le
SlidingFrameLayout
droite/gauche, tout ce que vous avez à faire est d'appeler leSlidingFrameLayout.toggleSlide()
méthode. Bien sûr, vous pouvez modifier ceSlidingFrameLayout
pour vos fins de glisser un plus grand nombre de pixels, de glisser plus longtemps, etc, mais cela devrait être suffisant pour vous aider à démarrer 🙂J'ai eu un problème similaire, TranslateAnimation en fait de déplacer la vue si vous appelez setFillAfter maintenant (android bug). J'ai dû faire quelque chose de similaire à ce que j'ai dit, hé permet d'utiliser une animation auditeur et puis il suffit de passer le tout au bon endroit. Malheureusement, il y a un bug sur l'animation des auditeurs ainsi (stackoverflow solution). J'ai donc créé ma propre classe de mise en page en fonction de la solution dans le stackoverflow solution et j'étais bon pour aller 🙂
TranslateAnimation
pour cela est un peu brouillon. Quand j'ai ditTranslateAnimation
ne fait pas déplacer la Vue (malgré l'utilisation d'setFillAfter(true)
), je voulais dire que les éléments cliquables sont encore dans leur position d'origine. Voir cette vidéo pour un exemple de ce que je veux dire: http://www.youtube.com/watch?v=VY3kMFrA3wUandroid.view.animation
package) modifier l'apparence visuelle d'unView
mais ne fait pas de changer leView
lui-même, de sorte que les boutons de laView
par exemple semble dans un nouveau lieu, mais sont encore réellement où ils étaient avant l'animation a été exécuté. Ce n'est pas un bug apparemment. Juste la façon dont les animations ont été pré-Nid d'abeille. Les nouvelles animations de classes prévues pour remédier à ce problème et d'autres défauts.nineoldandroids
bibliothèque a quelques lacunes, mais je trouve que lorsque j'ai mis mon point de Vue, les marges de par programme (en Vue de la mise en page params, la définition de la nouvelle marges sur la mise en page paramètres, puis réglage de la modification de la disposition params à mon point de Vue de la présentation du params), elle provoque de mon point de Vue (et les enfants à l'intérieur) pour redimensionner pour s'adapter à l'intérieur de son parent. J'ai besoin de changer mon point de Vue, à droite/à gauche, cependant, sans redimensionnement. Toutes les suggestions? Ou pourriez-vous peut-être modifier votre réponse à inclure un exemple de code de comment vous l'avez fait?View
dans unHorizontalScrollView
, pour définir la largeur de laHorizontalScrollView
pour les adapter à monView
+ déplacement, puis à faire glisser mesView
(en jouant avec laView
's de la marge de gauche) à l'intérieur de laHorizontalScrollView
. N'ai pas essayé, mais je devine que ce serait juste un petit tweak pour la solution, je suis sur le point d'ajouter à ce fil...