使用假角度的多个RotationAnimations(时移)

时间:2014-02-26 15:46:15

标签: android-animation rotateanimation

我正在尝试一个非常简单的动画。将视图向左旋转18°,然后向右旋转180°(相对)(+ 162°绝对值)然后再回到正常0°(绝对值)(相对于-162°)......

int first = -18;
int second = first +180;
int animationGap = 500;
//left rotation
final RotateAnimation leftRotation = new RotateAnimation(0, first, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
leftRotation.setDuration(1000);
leftRotation.setInterpolator(new AccelerateDecelerateInterpolator());
//right rotation
final RotateAnimation rightRotation = new RotateAnimation(first, second, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rightRotation.setDuration(1000);
rightRotation.setStartOffset(1000+animationGap);
rightRotation.setInterpolator(new AccelerateDecelerateInterpolator());
//back to normal rotation
final RotateAnimation toNormalRotation = new RotateAnimation(second, 0, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
toNormalRotation.setDuration(1000);
toNormalRotation.setStartOffset(2000+animationGap*2);
toNormalRotation.setInterpolator(new AccelerateDecelerateInterpolator());
//animation set
final AnimationSet animationSet = new AnimationSet(true);
animationSet.setInterpolator(new AccelerateDecelerateInterpolator());
animationSet.addAnimation(leftRotation);
animationSet.addAnimation(rightRotation);
animationSet.addAnimation(toNormalRotation);

我用这个开始整个包:

view.startAnimation(animationSet);

它与first= -90;按预期工作,但上部星座完全错误...(在三星s4和google nexus s上测试)
当然我可以用AnimationListener快速解决这个问题并从中开始下一个动画,但这不是真正的解决方案或答案。
那么有谁能告诉我为什么会这样,以及如何防止这种情况发生? 修改:
我认为这个问题可能是作为马克思的循环数学表示(轮换可能会操纵每个otehr)。但它不应该是一个问题因为android可以识别这个或者可能会产生不同的因为它们之间的时间延迟 我还在寻找一个很好的解决方案

1 个答案:

答案 0 :(得分:0)

我的猜测是正确的,因此唯一的解决方案是在每次旋转时使用AnimationListener并在onEnd方法中启动下一个..