Faire pivoter une animation Imagewith
Ce Que J'Ai
J'ai une image de flèche (comme la gauche). Lorsque l'utilisateur clique dessus, il doit effectuer une rotation de 180 degrés avec une animation et doit ressembler à celui de droite.
Ce Que J'Ai Fait
private void rotate(float degree, final int toggleV) {
final RotateAnimation rotateAnim = new RotateAnimation(0.0f, degree,
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rotateAnim.setDuration(500);
toggle.startAnimation(rotateAnim);
rotateAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (toggleV == 1)
toggle.setImageResource(R.drawable.toggle_up);
else
toggle.setImageResource(R.drawable.toggle_down);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
Le Problème
Je vois que l'animation fonctionne bien, mais il y a un peu de scintillement pendant le réglage de l'image. Peut-être à cause de la différence de temps lors de la fin de l'animation et de l'image est réglé.
Comment puis-je supprimer ce problème de scintillement? Avez-vous de la meilleure approche pour ce faire?
source d'informationauteur Aritra Roy
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, qu'est-ce que vous minimum SDK exigence? Dans le cas où c'est au moins d'Android 3.0, vous pouvez utiliser la nouvelle animation de cadre, et de les animer votre Image avec quelque chose comme ceci:
Sur le scintillement: je n'aurais pas de réinitialisation de l'image source de la ImageView après la rotation, je venais de quitter à l'origine, et assurez-vous que la rotation de l'animation remplit après l'animation, en laissant tourner l'image. Le scintillement est probablement causé par la Vue de la nouvelle disposition/redessiner sur le changement de la source de l'image.
Autres artefacts visuels (scintillement?) peut être dû au fait que l'original-rotation de l'image et de la rotation d'une image statique peut varier de quelques pixels.
Si j'étais vous, je serais utilisation
ViewPropertyAnimator
(disponible à partir de l'API 12). Sa syntaxe est plus simple de l'OMI.Utilisation serait:
Pourquoi ne pas vous utiliser RotateAnimation?
créer un dossier nommé anim en res et un fichier nommé rotator.xml à l'intérieur de res/anim.
Ici une rotation complète sera achevée en 4000ms (4 secondes). Maintenant ajouter une image PNG que vous souhaitez faire pivoter dans votre dossier drawable. Ensuite, ouvrez res/main.xml, après suppression du défaut textView dans la mise en page, ajouter une ImageView et Bouton sur la mise en page. Définissez la propriété src de l'ImageView que votre nom de fichier de l'image ajoutée, par exemple android:src=”@drawable/myimg” Ok, permet de modifier la classe principale. Dans le onClick() pour le bouton, ajouter le code nécessaire pour l'exécution de l'animation. Vérifiez le code suivant.
Vous pouvez utiliser
setFillAfter
si vous souhaitez conserver l'état de votre animation.Code vérifié: (Vous pouvez suivre ma solution)
drawable/ic_arrow_up.xml
anim/rotate_up.xml
anim/rotate_down.xml
J'ai utilisé ce code. Car cela permettra d'économiser de l'état d'animation: