Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何同步动画和动作?_Android_Animation_Handler - Fatal编程技术网

Android 如何同步动画和动作?

Android 如何同步动画和动作?,android,animation,handler,Android,Animation,Handler,我的动画有问题。 其思想是使用TranslateAnimation将一些ImageView移动到另一个ImageView位置,如下所示: 动画效果很好,当我想在动画结束后继续执行代码时,问题就来了,应该在动画结束后执行。 我试图使用处理程序或onAnimationEnd来确保这一点,但无法很好地同步它 代码要么发生在动画期间,要么在动画之后执行 -在动画过程中:只需几毫秒,但足够明显的是,ImageView会将其显示在前面一个位置,在这段时间结束后,它会返回到所需的位置,这是因为我正在使用set

我的动画有问题。 其思想是使用TranslateAnimation将一些ImageView移动到另一个ImageView位置,如下所示:

动画效果很好,当我想在动画结束后继续执行代码时,问题就来了,应该在动画结束后执行。 我试图使用处理程序或onAnimationEnd来确保这一点,但无法很好地同步它

代码要么发生在动画期间,要么在动画之后执行

-在动画过程中:只需几毫秒,但足够明显的是,ImageView会将其显示在前面一个位置,在这段时间结束后,它会返回到所需的位置,这是因为我正在使用setImageResource更改ImageView在动画中的显示方式,但如果该更改发生在动画结束之前,那么我们将看到前面一个位置的ImageView,如我前面所说,您可以在下图中看到:

-动画结束后:动画结束,执行代码几毫秒后,在这段时间内ImageView返回初始位置,在这段时间后它到达所需位置,这里应用上面的相同解释,因为我使用的是相同的代码,区别在于它在动画之后执行的代码:

在Handler中,我使用了与动画持续时间相同的等待时间,onAnimationEnd也有同样的问题。 因此,我在处理程序中尝试了不同的时间,最接近于不注意到这一点的时间是动画持续时间+25毫秒,至少在我的手机中是这样,但它有时会失败,并且询问它在不同设备上的工作方式,当然这取决于芯片处理,所以这不是一个解决方案

这里是使用处理程序的代码的一小部分:

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行,所以我把想法放在这里