私は非常に単純なアニメーションを試しています。ビューを左に 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;
いますが、上の星座では完全に間違っています...(samsung s4とgoogle nexus sでテスト済み)
もちろん、これをすばやく修正しAnimationListener
て次のアニメーションを開始できますが、これは実際の解決策や答えではありません.
なぜこれが起こっているのか、どうすればこれを防ぐことができるのか教えてくれる人はいますか?
編集:
問題は、基礎となる martix としての数学的表現である可能性があると思います (回転は、それぞれを操作する可能性があります)。Androidはこれを認識できるか、時間の遅延のために異なるものを生成する可能性があるため、問題にはなりません。
私はまだ素敵な解決策を探しています