Pause and Resume Translate Animation

Go To


I am using Translate Animation for moving an ImageView. I am using this code:

TranslateAnimation set1 = new TranslateAnimation(-4, 10, -110, 0);
        TranslateAnimation set2 = new TranslateAnimation(10, -3, 0, 115);
        TranslateAnimation set3 = new TranslateAnimation(-3, -20, 0, -100);
        TranslateAnimation set4 = new TranslateAnimation(0, 13, 0, -120);



After creating a set of animations, I apply them on the ImageView like this:

image = (ImageView)findViewById(;

Everything is working fine, but I cannot pause the animation and resume on button click.

How can I do that?

I tried everything, but didn't succeed. Any idea how to do this?

Please help!

2012-04-04 07:31
by Pari


After searching for a time i found this link and check is this working for Translate Animation or not and after some modification this is working for your animation too.!

See modified code below:

public class TranslateAnim extends TranslateAnimation{

    public TranslateAnim(float fromXDelta, float toXDelta, float fromYDelta,
            float toYDelta) {
        super(fromXDelta, toXDelta, fromYDelta, toYDelta);
        // TODO Auto-generated constructor stub

    private long mElapsedAtPause=0;
    private boolean mPaused=false;

    public boolean getTransformation(long currentTime, Transformation outTransformation) {
        if(mPaused && mElapsedAtPause==0) {
        return super.getTransformation(currentTime, outTransformation);

    public void pause() {

    public void resume() {

I'll only change class name, extends class name and constructor of this class.

you can use it like:

TranslateAnim set1, set2, set3, set4; // objects of TranslateAnim Class

set1 = new TranslateAnim(-4, 10, -110, 0); // initialize all objects like this way

animSet.addAnimation(set1); // add all animation objests in your animation set as you do before


and after start your animation you have only call pause and resume methods. Thanks to Johan for share his code with us.

Hope this solve your problem. :)

2012-04-05 12:26
by Deepak
Can we load animation from XML - Deepak 2012-04-30 12:49
Oh I posted on my own question? So silly I am. : - Deepak 2012-04-30 12:50
Can we set the position of view after using on pause. I mean, suppose I use pause method in between and then I want to apply the new animation at the paused position. Is it possible - Mohit Verma 2013-11-20 12:21
Worked for me! Thanks - Peter Arandorenko 2014-01-19 23:58


You can also do like this: а можно еще так:

public class MyTranslateAnimation extends TranslateAnimation {

    private long mTimePause, mTimeTotal;
    private boolean mPause;

    public MyTranslateAnimation(Context context, AttributeSet attrs) {

        super(context, attrs);


    public boolean getTransformation(long currentTime, Transformation outTransformation) {
        return super.getTransformation(mTimeTotal - mTimePause, outTransformation);

    private void updateTime(long currentTime) {
        long dt = currentTime - mTimeTotal;
        mTimeTotal += dt;
        if (mPause) {
            mTimePause += dt;

    public void pause() {
        mPause = true;

    public void resume() {
        mPause = false;


To create an animation from an XML, you can create your own AnimationUtils subclass, like this: для создания анимации из XML можно сделать свой AnimationUtils:

public class MyAnimationUtils {

    public static Animation loadAnimation(Context context, int id) throws Resources.NotFoundException {

        XmlResourceParser parser = null;
        try {
            parser = context.getResources().getAnimation(id);
            return createAnimationFromXml(context, parser);
        } catch (XmlPullParserException ex) {
            Resources.NotFoundException rnf = new Resources.NotFoundException("Can't load animation resource ID #0x" + Integer.toHexString(id));
            throw rnf;
        } catch (IOException ex) {
            Resources.NotFoundException rnf = new Resources.NotFoundException("Can't load animation resource ID #0x" + Integer.toHexString(id));
            throw rnf;
        } finally {
            if (parser != null) parser.close();


    private static Animation createAnimationFromXml(Context c, XmlPullParser parser) throws XmlPullParserException, IOException {

        return createAnimationFromXml(c, parser, null, Xml.asAttributeSet(parser));


    private static Animation createAnimationFromXml(Context c, XmlPullParser parser, AnimationSet parent, AttributeSet attrs) throws XmlPullParserException, IOException {

        Animation anim = null;

        // Make sure we are on a start tag.
        int type;
        int depth = parser.getDepth();

        while ((( != XmlPullParser.END_TAG || parser.getDepth() > depth)
                && type != XmlPullParser.END_DOCUMENT) {

            if (type != XmlPullParser.START_TAG) {

            String  name = parser.getName();

            if (name.equals("set")) {
                anim = new AnimationSet(c, attrs);
                createAnimationFromXml(c, parser, (AnimationSet)anim, attrs);
            } else if (name.equals("alpha")) {
                anim = new AlphaAnimation(c, attrs);
            } else if (name.equals("scale")) {
                anim = new ScaleAnimation(c, attrs);
            }  else if (name.equals("rotate")) {
                anim = new RotateAnimation(c, attrs);
            }  else if (name.equals("translate")) {
                //anim = new TranslateAnimation(c, attrs);
                anim = new MyTranslateAnimation(c, attrs); // отредактировали только эту строчку, остальное взяли как было
            } else {
                throw new RuntimeException("Unknown animation name: " + parser.getName());

            if (parent != null) {

        return anim;



And then you build the animation like this: и вот так создаем анимацию:

MyTranslateAnimation cloud1 = (MyTranslateAnimation) MyAnimationUtils.loadAnimation(this, R.anim.main_cloud1);

Hope this helps. Пользуйтесь на здоровье!

2015-06-15 08:28
by Roman