如何同步动画和动作?

时间:2015-01-07 04:24:17

标签: android animation handler

我的动画有问题。 我们的想法是使用TranslateAnimation将一些图像视图移动到另一个图像视图位置,如下所示:

TranslateAnimation

动画工作正常,当我想在动画结束后继续执行代码时(问题是应该在此之后执行),问题就出现了。 我试图使用处理程序或onAnimationEnd来确保这一点,但不能很好地同步它。

代码在动画期间发生,或者在动画之后执行。

- 在动画期间:它只有几毫秒,但足够明显的是ImageView它显示在前面的一个位置,在那个小时间结束后它返回到所需位置,这是因为我&#39 ;我使用setImageResource以动画中显示的方式更改ImageView,但如果在动画结束之前发生了这种变化,那么我们就像前面所说的那样在前面看到ImageView的一个位置,你可以看到以下图片:

enter image description here

- 在动画之后:好吧,动画结束并且在执行代码之后几毫秒,在此期间ImageView返回到初始位置,在那个小时间之后它移动到所需位置,这里从上面应用相同的解释,因为我使用相同的代码,区别在于它在动画后执行的代码:

enter image description here

在Handler中,我使用与动画持续时间相同的等待时间,我遇到了这个问题(与onAnimationEnd相同)。 所以我在Handler中尝试了不同的时间,并且最近的时间没有注意到这是动画持续时间+ 25毫秒(至少在我的手机中)但它有时失败并且忘记它将如何在不同的设备上工作,当然这取决于芯片处理,所以它不是解决方案。

这是使用Handler的代码的一小部分:

AnimationsConfig(); //Configuring translate animations
anim.setDuration(500);
anim2.setDuration(500);
anim3.setDuration(500);
anim4.setDuration(500);
anim5.setDuration(500);
anim6.setDuration(500);
animation.startAnimation(anim);
animation2.startAnimation(anim2);
animation3.startAnimation(anim3);
animation4.startAnimation(anim4);
animation5.startAnimation(anim5);
animation6.startAnimation(anim6);
new Handler().postDelayed(new Runnable() {
    public void run() {
        DrawNewPositions(); //Changing imageviews resources according to the animation
    }
}, 500L);

或者使用Animation.setFillAfter(true)但代码中带有DrawNewPositions()会让ImageView永远领先一个位置,而不仅仅是毫秒,那么更糟糕的是,如果我移除DrawNewPositions() ImageView 1}}将永远从它的第一个位置开始。

我需要一个解决方案才能解决这个问题,这些变化在用户眼中并不明显,并且必须足够顺畅。

由于

1 个答案:

答案 0 :(得分:0)

这种动画方式不会移动x,y而只是制作动画,所以你必须在动画后为每个对象改变x,y。