将这样一个可绘制的工作像这样:
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);
}
}
任何人都可以帮我解决这个问题,或者这是创建旋转可绘制动画的其他方法。
对不起我的英语很抱歉。
答案 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