在动画上使用setFillAfter时出现Android渲染错误

时间:2014-08-13 11:28:39

标签: android animation

使用setFillAfter(boolean flag)使其在动画后保持位置时出现了奇怪的问题。

它开始绘制错误,如下图所示。

the drawing got some error, it does not redraw properly

我的动画代码是:

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,但它不起作用。

请帮帮我。非常感谢你!

1 个答案:

答案 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。我会尝试的。