'Reset view to original position after animation

I'm animating a view and I want to reset the view to the original position after animation ended.

This is what I have:

rl2 is a relativeLayout

rl2.animate().translationX(-60).translationY(117).setDuration(2000);

I tried setting this but its not working:

rl2.clearAnimation();


Solution 1:[1]

clearAnimation(); does not reset your animations, it just stops them and removes them from the animation queue. To undo your animations you need to actually undo them. So, for your code block you will need to call rl2.animate().translationX(0).translationY(0).setDuration(2000); to move the view back to its original position.

Solution 2:[2]

As @Chris Stillwell mentioned on his answer, But you can move View back to it's original position after translation animation by

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

Solution 3:[3]

I know this question was asked long time ago but someone may still look for answer. I use the Animation class for this kind of thing; there is a setFillAfter method in this class, so you can set if you want the animation to apply its transformation after it ends.

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);

Solution 4:[4]

If you're going to remove view don't use animation.removeAllListeners(), the function cannot continue that's why you will see some error. If you want to disappear a view, use View.GONE

in Kotlin like this:

animation.doOnEnd {
binding.mainLayout.visibility = View.GONE}

But by this way you couldn't remove any animation! So it' better rest them to the initial position.

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

Solution 5:[5]

just use anim.setFillAfter(false); to reset automatically after animation ends.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 Adrian Mole
Solution 4 Mori
Solution 5 Hamid