Android连锁animation

我试图把两个animation“链接”在一起,所以当一个完成时,另一个开始。 这是工作,除了一个问题。 第一个animation完成后,它会回到原来的位置。 我将填充设置为true。 我还有什么遗漏?

这是我正在使用的代码。 请注意,这是在扩展LinearLayout的类中。

// FIRST ANIMATION mAnimation = new TranslateAnimation(0, PANEL_END_X, 0, 0); mAnimation.setDuration(PANEL_TRANSITION_TIME); mAnimation.setFillAfter(true); mAnimation.setAnimationListener(new Animation.AnimationListener() { public void onAnimationEnd(Animation animation) { // FIRST ANIMATION COMPLETE, CALL THE SECOND ANIMATION startAnimation(mAlphaAnimation); } }); // SECOND ANIMATION mAlphaAnimation = new AlphaAnimation(1.0f, 0.0f); mAlphaAnimation.setDuration(PANEL_ALPHA_TRANSITION_TIME); mAlphaAnimation.setFillAfter(true); 

解:

唯一可以让我满意的方法是使用AnimationSet ,但是设置第二个animation的开始偏移量,以便开始offset +第一个animation的持续时间,再加上一点填充。 在我的情况下,他们不必完全确切。

我试着用CommonsWare提供的各种价值玩法,但是我总是会得到某种types的“贴紧”效果,在新的价值恢复到原来的价值之前。

Solutions Collecting From Web of "Android连锁animation"

第一个animation完成后,它会回到原来的位置。 我将填充设置为true。 我还有什么遗漏?

animation是瞬态效果。 如果你想要的效果是永久的,你必须自己在onAnimationEnd() 。 在TranslateAnimation的情况下,您需要更改LayoutParams或受影响的小部件的某些内容,以将其永久保留在最终位置。 或者,如果您将其转换为屏幕,请将可见性设置为View.GONE

我发现我相信是使用AnimationSet.Builder类的API级别11和更高级别的理想解决scheme。

Builder对象是一个实用程序类,用于将animation添加到AnimatorSet以及各种animation之间的关系。 Builder方法的意图,和AnimatorSet的play()方法一起,使得以自然的方式expressionanimation的依赖关系成为可能。 开发人员也可以使用playTogether()和playSequentially()方法(如果这些方法符合需要的话),但是在某些情况下可能更容易将animation的AnimatorSet成对

例如,设置一个AnimatorSet同时播放anim1和anim2,当anim2完成时animation3,当anim3完成时anim4播放:

 AnimatorSet s = new AnimatorSet(); s.play(anim1).with(anim2); s.play(anim2).before(anim3); s.play(anim4).after(anim3); 

尝试将它们组合到一个AnimationSet