22

像这样很好地绘制一个可绘制的作品:

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

任何人都可以帮我解决这个问题,或者这些是创建旋转可绘制动画的任何其他方式。

我很抱歉我的英语不好。

4

2 回答 2

75

尝试使用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,则可见区域和可点击区域都将移动所需的位置。

于 2015-04-06T05:13:09.633 回答
19

试试这个应用于图像的简单旋转动画。

 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 后按钮不可点击

于 2012-12-26T10:59:12.310 回答