如何通过ObjectAnimator旋转drawable?

时间:2012-12-26 10:28:24

标签: android rotation drawable objectanimator

将这样一个可绘制的工作像这样:

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

但是,如果我想像下面那样旋转一个可绘制的,它就不起作用。

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 个答案:

答案 0 :(得分:57)

请尝试使用ObjectAnimator

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

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

修改 由于这个问题引起了一些关注,让我解释为什么要使用ObjectAnimator而不是其他过渡动画师

关于使用ObjectAnimator的事情是,如果你使用另一种动画方法,它正在移动项目的可见区域和可点击区域,例如Transition Animation或其他一些动画师,让我们说如果你想要将Button从屏幕左下角移动到左上角,它只会移动可见区域而不移动Button本身,可点击区域仍将位于之前的位置,在这种情况下可点击区域仍然位于左下角,而不是您移动按钮的左上角。

如果对ObjectAnimator执行相同操作,可见区域和可点击区域都将移动所需位置。

答案 1 :(得分:16)

尝试将这种简单的旋转动画应用于图像。

 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当前位置不同是正确的。请检查此问题以使可点击区域正确无误。 Button is not clickable after TranslateAnimation