Android 如何同步动画和动作?
我的动画有问题。 其思想是使用TranslateAnimation将一些ImageView移动到另一个ImageView位置,如下所示: 动画效果很好,当我想在动画结束后继续执行代码时,问题就来了,应该在动画结束后执行。 我试图使用处理程序或onAnimationEnd来确保这一点,但无法很好地同步它 代码要么发生在动画期间,要么在动画之后执行 -在动画过程中:只需几毫秒,但足够明显的是,ImageView会将其显示在前面一个位置,在这段时间结束后,它会返回到所需的位置,这是因为我正在使用setImageResource更改ImageView在动画中的显示方式,但如果该更改发生在动画结束之前,那么我们将看到前面一个位置的ImageView,如我前面所说,您可以在下图中看到: -动画结束后:动画结束,执行代码几毫秒后,在这段时间内ImageView返回初始位置,在这段时间后它到达所需位置,这里应用上面的相同解释,因为我使用的是相同的代码,区别在于它在动画之后执行的代码: 在Handler中,我使用了与动画持续时间相同的等待时间,onAnimationEnd也有同样的问题。 因此,我在处理程序中尝试了不同的时间,最接近于不注意到这一点的时间是动画持续时间+25毫秒,至少在我的手机中是这样,但它有时会失败,并且询问它在不同设备上的工作方式,当然这取决于芯片处理,所以这不是一个解决方案 这里是使用处理程序的代码的一小部分:Android 如何同步动画和动作?,android,animation,handler,Android,Animation,Handler,我的动画有问题。 其思想是使用TranslateAnimation将一些ImageView移动到另一个ImageView位置,如下所示: 动画效果很好,当我想在动画结束后继续执行代码时,问题就来了,应该在动画结束后执行。 我试图使用处理程序或onAnimationEnd来确保这一点,但无法很好地同步它 代码要么发生在动画期间,要么在动画之后执行 -在动画过程中:只需几毫秒,但足够明显的是,ImageView会将其显示在前面一个位置,在这段时间结束后,它会返回到所需的位置,这是因为我正在使用set
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.setFillAfterrue,但代码中的DrawNewPositions会使ImageView永远领先一个位置,而不仅仅是毫秒,更糟糕的是,如果删除DrawNewPositions,ImageView将永远从第一个位置开始
我需要一个解决方案来解决这个问题,这些变化在用户眼中是不明显的,必须足够平滑
感谢这种动画方式不移动x,y,只制作动画,所以动画后必须为每个对象更改x,y。是的,正如我解释的,这是DrawNewPositions的工作,但不更改x,y,只是更改布局中每个ImageView的图像内部有更多代码,但是3节课之间有500行,所以我把想法放在这里