使用setFillAfter(boolean flag)
使其在动画后保持位置时出现了奇怪的问题。
它开始绘制错误,如下图所示。
我的动画代码是:
RotateAnimation rotateAnimation = new RotateAnimation(rotation, -rotation, box.getX() + box.getWidth() / 2, box.getY() + 150);
rotateAnimation.setDuration(500);
AnimationSet returnAnimation = new AnimationSet(true);
returnAnimation.addAnimation(rotateAnimation);
// I use AnimationSet because I want to add one more TranslateAnimation later
returnAnimation.setFillAfter(true);
我不知道如何解决这个问题。如果我删除setFillAfter
,动画将在完成后保持其状态。
我尝试添加一个AnimationListener并在clearAnimation
上调用animationEnd
,但它不起作用。
请帮帮我。非常感谢你!
答案 0 :(得分:0)
终于找到了解决方案,但不是最好的解决方案。
我在触摸事件(MotionEvent.ACTION_UP
)上调用了上面的动画代码。触摸移动事件(MotionEvent.ACTION_MOVE
),应该是:
returnAnimation.setFillAfter(false);
box.clearAnimation();
屏幕上没有渲染错误。
完成的代码应为:
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
//...
returnAnimation.setFillAfter(false);
box.clearAnimation();
//...
break;
case MotionEvent.ACTION_UP:
//...
returnAnimation.setFillAfter(true);
box.startAnimation(returnAnimation);
//...
break;
}
但是最大的问题是setFillAfter(boolean flag)
是假状态函数,并且视图在动画之后不会改变它的实际位置。
我需要找到更好的解决方案。
@sandrstar 建议我使用Property Animation。我会尝试的。