我的动画有问题。 我们的想法是使用TranslateAnimation将一些图像视图移动到另一个图像视图位置,如下所示:
动画工作正常,当我想在动画结束后继续执行代码时(问题是应该在此之后执行),问题就出现了。 我试图使用处理程序或onAnimationEnd来确保这一点,但不能很好地同步它。
代码在动画期间发生,或者在动画之后执行。
- 在动画期间:它只有几毫秒,但足够明显的是ImageView它显示在前面的一个位置,在那个小时间结束后它返回到所需位置,这是因为我&#39 ;我使用setImageResource以动画中显示的方式更改ImageView,但如果在动画结束之前发生了这种变化,那么我们就像前面所说的那样在前面看到ImageView的一个位置,你可以看到以下图片:
- 在动画之后:好吧,动画结束并且在执行代码之后几毫秒,在此期间ImageView返回到初始位置,在那个小时间之后它移动到所需位置,这里从上面应用相同的解释,因为我使用相同的代码,区别在于它在动画后执行的代码:
在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}}将永远从它的第一个位置开始。
我需要一个解决方案才能解决这个问题,这些变化在用户眼中并不明显,并且必须足够顺畅。
由于
答案 0 :(得分:0)
这种动画方式不会移动x,y而只是制作动画,所以你必须在动画后为每个对象改变x,y。