Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to start activity on animation end

Tags:

android

This is my first app and i need to start new activity when the animation ends. what do I need to do? My code:

package com.lineage.goddess;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class LineageSplashActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        startAnimation();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    }

    private void startAnimation() {
        // TODO Auto-generated method stub
        TextView logo1= (TextView) findViewById(R.id.TextView1);
        Animation fade1= AnimationUtils.loadAnimation(this, R.anim.fade_in);
        logo1.startAnimation(fade1);
        TextView logo2= (TextView) findViewById(R.id.TextView2);
        Animation fade2= AnimationUtils.loadAnimation(this, R.anim.fade_in);
        logo2.startAnimation(fade2);
        TextView logo3= (TextView) findViewById(R.id.TextView3);
        Animation fade3= AnimationUtils.loadAnimation(this, R.anim.fade_in);
        logo3.startAnimation(fade3);
        TextView logo4= (TextView) findViewById(R.id.TextView4);
        Animation fade4= AnimationUtils.loadAnimation(this, R.anim.fade_in2);
        logo4.startAnimation(fade4);}
         public void onAnimationEnd() {
             Intent i = new Intent( LineageSplashActivity.this, LineageMenuActivity.class );
             LineageSplashActivity.this.startActivity( i );
;
        }
    }
like image 745
user1108339 Avatar asked Dec 20 '11 17:12

user1108339


2 Answers

Set an AnimationListener to the animation you want to use to start your Activity.

myAnimation.setAnimationListener(new AnimationListener() {
    public void onAnimationStart(Animation animation) {}
    public void onAnimationRepeat(Animation animation) {}
    public void onAnimationEnd(Animation animation) {
        Intent i = new Intent( LineageSplashActivity.this, LineageMenuActivity.class );
        LineageSplashActivity.this.startActivity( i );
    }
}

So, your code will be like this:

package com.lineage.goddess;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class LineageSplashActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        startAnimation();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    }

    private void startAnimation() {
        // TODO Auto-generated method stub
        TextView logo1= (TextView) findViewById(R.id.TextView1);
        Animation fade1= AnimationUtils.loadAnimation(this, R.anim.fade_in);
        logo1.startAnimation(fade1);
        TextView logo2= (TextView) findViewById(R.id.TextView2);
        Animation fade2= AnimationUtils.loadAnimation(this, R.anim.fade_in);
        logo2.startAnimation(fade2);
        TextView logo3= (TextView) findViewById(R.id.TextView3);
        Animation fade3= AnimationUtils.loadAnimation(this, R.anim.fade_in);
        logo3.startAnimation(fade3);
        TextView logo4= (TextView) findViewById(R.id.TextView4);
        Animation fade4= AnimationUtils.loadAnimation(this, R.anim.fade_in2);
        face4.setAnimationListener(new AnimationListener() {
            public void onAnimationStart(Animation animation) {}
            public void onAnimationRepeat(Animation animation) {}
            public void onAnimationEnd(Animation animation) {
                Intent i = new Intent( LineageSplashActivity.this, LineageMenuActivity.class );
                LineageSplashActivity.this.startActivity( i );
            }
        }    

        logo4.startAnimation(fade4);    
    }
}
like image 170
Jordi Avatar answered Sep 28 '22 11:09

Jordi


Your code made my eye's bleed, so I fixed it as much as I could:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;

public class LineageSplashActivity extends Activity implements AnimationListener {

    private static final int NUMBER_OF_ANIMATIONS = 4;
    private int animationFinishedCount = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

        startAnimations();
    }

    private void startAnimations() {
        Animation fade = AnimationUtils.loadAnimation(this, R.anim.fade_in);
        fade.setAnimationListener(this);    

        findViewById(R.id.TextView1).startAnimation(fade);
        findViewById(R.id.TextView2).startAnimation(fade);
        findViewById(R.id.TextView3).startAnimation(fade);
        findViewById(R.id.TextView4).startAnimation(fade);
    }


    @Override
    public void onAnimationEnd(Animation animation) {
            // When all animations have finished - start the next activity
        if(++animationFinishedCount == NUMBER_OF_ANIMATIONS){
            Intent intent = new Intent( this, LineageMenuActivity.class );
            startActivity( intent );
        }
    }

    @Override
    public void onAnimationStart(Animation animation) {
        // Nothing
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // Nothing
    }
}

And if it's not a mis-type and you actually need a different animation for the 4th textview you can remove the count check and just add the animation listener to that individual animation.

like image 42
Blundell Avatar answered Sep 28 '22 10:09

Blundell