Как повернуть drawable с помощью ObjectAnimator?

Alphaing drawable хорошо работает так:

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);
 }

но если я хочу повернуть drawable, как показано ниже, это работа Дона.

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);
    }
}

любой может помочь мне исправить эту проблему ,или это любой другой способ создания анимации вращения.

мне жаль мой бедный английский.

2 ответов


попробуйте эту простую анимацию вращения, примененную к изображению.

 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);

этот ответ просто ради вопроса, правильно, что кликабельная область будет отличаться от Viewтекущее положение. Пожалуйста, проверьте этот вопрос, чтобы сделать кликабельную область правильной. кнопка не кликабельна после TranslateAnimation


попробовать ObjectAnimator вместо.

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

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

редактировать поскольку этот вопрос привлекает некоторое внимание, позвольте мне объяснить, почему использовать ObjectAnimator вместо других аниматоров перехода

дело об использовании ObjectAnimator это то, что он перемещает как видимую, так и кликабельную область элемента, если вы используете другой метод анимации, например анимацию перехода или некоторые другие аниматоры, и, скажем, если вы хотите переместить Button от в левом нижнем углу экрана в левом верхнем углу, он будет перемещать только видимую область, но не Button сам, кликабельная область по-прежнему будет на предыдущей позиции, в этом случае кликабельная область по-прежнему будет в левом нижнем углу, а не в левом верхнем углу, куда вы переместили кнопку.

если вы сделаете то же самое с ObjectAnimator, и видимая область, и кликабельная область переместят нужное местоположение.