动画后将视图重置到原始位置

8
我正在对一个视图进行动画处理,我想在动画结束后将该视图重置到原始位置。
这是我的代码:
rl2是一个RelativeLayout。
rl2.animate().translationX(-60).translationY(117).setDuration(2000);

我尝试设置这个,但没有效果:
rl2.clearAnimation();
5个回答

18

clearAnimation();并不会重置你的动画,它只是停止它们并将它们从动画队列中移除。要撤销你的动画,你需要实际上去撤销它们。所以,对于你的代码块,你需要调用rl2.animate().translationX(0).translationY(0).setDuration(2000);将视图移回原来的位置。


11

正如@Chris Stillwell在他的答案中所提到的,但是你可以通过以下方法,在翻译动画后将 View 移回其原始位置

rl2.animate().translationX(0).translationY(0);

1

我知道这个问题很久以前就被问过了,但是可能仍有人在寻找答案。 我使用 Animation 类来实现这种效果;在这个类中有一个 setFillAfter 方法,因此您可以设置是否希望动画在结束后应用其转换。

Animation anim = new ScaleAnimation(
            1f, 1f, // Start and end values for the X axis scaling
            1f, 2f, // Start and end values for the Y axis scaling
            Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
            Animation.RELATIVE_TO_SELF, 1f); // Pivot point of Y scaling
anim.setFillAfter(false); // no needed to keep the result of the animation
anim.setDuration(1000);
anim.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {
                    
    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
});
gangsterImage.startAnimation(anim);

0
如果您要删除视图,请不要使用animation.removeAllListeners(),因为该函数无法继续执行,这就是为什么您会看到一些错误。如果要隐藏一个视图,请使用View.GONEKotlin中可以这样做:
animation.doOnEnd {
binding.mainLayout.visibility = View.GONE}

但是这样做你就无法移除任何动画!所以最好将它们恢复到初始位置。

binding.tvM2.animate().translationX(0f).translationY(0f).rotation(0f)

0

只需使用 anim.setFillAfter(false); 来在动画结束后自动重置即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接