web-dev-qa-db-fra.com

Comment faire pivoter un dessinable par ObjectAnimator?

Alphaing un travail dessinable bien comme ceci:

if(mAlphaAnimation == null){
        mAlphaAnimation = ObjectAnimator.ofFloat(this, "alpha", 0.0f,1.0f).setDuration(TARGET_ANIM_ALPHA_DURATION);
        mAlphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
        mAlphaAnimation.setStartDelay(TARGET_ANIM_ALPHA_DELAY_BASE*power);
        mAlphaAnimation.setRepeatCount(ValueAnimator.INFINITE);
        mAlphaAnimation.setRepeatMode(ValueAnimator.REVERSE);
        mAlphaAnimation.addUpdateListener(this);
 }

Mais si je veux faire pivoter un dessinable comme ci-dessous, ça ne marche pas.

private void createRotateAnim(float fromDegress,float toDegress,int duration){
    if(mRotateAnimation == null){
        mRotateAnimation = ObjectAnimator.ofFloat(this, "rotation",fromDegress,toDegress).setDuration(duration);
        mRotateAnimation.setStartDelay(100);
        mRotateAnimation.setInterpolator(new AccelerateInterpolator());
        mRotateAnimation.addUpdateListener(this);
    }
}

Tout le monde peut m'aider à résoudre ce problème, ou c'est une autre façon de créer une animation de dessin rotatif.

Je suis désolé pour mon pauvre anglais.

19
marine8888

Essayez cette animation de rotation simple appliquée à une image.

 ImageView imageview = (ImageView)findViewById(R.id.myimage);
 RotateAnimation rotate = new RotateAnimation(180, 360, Animation.RELATIVE_TO_SELF,    
 0.5f,  Animation.RELATIVE_TO_SELF, 0.5f);
  rotate.setDuration(500);
 imageview.startAnimation(rotate);

Cette réponse est juste pour une question, il est vrai que la zone cliquable sera différente de la position actuelle de View. Veuillez vérifier cette question pour rendre la zone cliquable correcte. Le bouton n'est pas cliquable après TranslateAnimation

18
Rahul

Essayez plutôt avec ObjectAnimator.

ImageView imageview = (ImageView)findViewById(R.id.image);

ObjectAnimator imageViewObjectAnimator = ObjectAnimator.ofFloat(imageview ,
                    "rotation", 0f, 360f);
            imageViewObjectAnimator.setDuration(1000); // miliseconds
            imageViewObjectAnimator.start();

MODIFIER Puisque cette question attire l'attention, permettez-moi d'expliquer pourquoi utiliser ObjectAnimator au lieu d'une autre transition animateurs

La chose à propos de l'utilisation de ObjectAnimator est qu'elle déplace à la fois la zone visible et la zone cliquable de l'élément, si vous utilisez une autre méthode d'animation, par exemple Transition Animation ou d'autres animateurs, et disons si vous souhaitez déplacer le Button du bas à gauche de l'écran vers le haut à gauche, cela ne fera que déplacer la zone visible mais pas le Button lui-même, la zone cliquable sera toujours à la position précédente, dans ce cas la zone cliquable sera toujours en bas à gauche au lieu du coin supérieur gauche où vous avez déplacé le bouton.

Si vous faites de même avec ObjectAnimator, la zone visible et la zone cliquable déplaceront l'emplacement souhaité.

59
Naskov