取消其他项目动画的正确方法

时间:2018-07-06 18:12:34

标签: android animation

我有一个容器(GridLayout),在其中放置了多个视图。当我单击这些视图中的任何一个时,应应用一个无限的动画(以表明它是选定/选择的视图)。

问题是我需要清除以前的动画,因此一次(针对单击的视图)一次只播放一个动画。

我当时想对动画进行全局定义,然后在onClick上取消动画并为其分配一个新的View,但是ObjectAnimator没有取消动画的方法。

PooledByteBufAllocator.DEFAULT

然后,我尝试将View保存为引用inClick,并使用clearAnimation()取消所有现有动画,但这没有效果,并且动画一直在播放。

ByteBuf

有关如何正确处理此问题的任何提示?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用AnimatorSet来控制动画。此类按指定顺序播放一组Animator对象。可以将动画设置为一起播放,按顺序播放或在指定的延迟后播放。

有两种方法可以将动画添加到AnimatorSet中:可以调用playTogether()或playSequentially()方法来一次添加一组动画,或者可以将play(Animator)与Builder类中的方法来逐个添加动画。

         AnimatorSet animatorSet = new AnimatorSet();

         child.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) 
            {
                if(animatorSet.isRunning)
                   animatorSet.cancel();


                ObjectAnimator anim = ObjectAnimator.ofFloat( v, "alpha", .5f, 1f );
                anim.setDuration( 1000 );
                anim.setRepeatMode( 2 );
                anim.setRepeatCount( 999999 );

                AnimatorSet animatorSet = new AnimatorSet();
                animatorSet.playTogether(anim);
                animatorSet.start();
            }
        });

希望这会有所帮助。