如何在动画结束时启动活动

10

这是我的第一个应用程序,我需要在动画结束时启动新活动。我该怎么做?我的代码:

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 );
;
        }
    }
2个回答

19

将AnimationListener设置到你想要用来启动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 );
    }
}

那么,你的代码将会是这样的:

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

请给我完整的代码...当我将其粘贴到以下位置时: TextView logo4= (TextView) findViewById(R.id.TextView4); Animation fade4= AnimationUtils.loadAnimation(this, R.anim.fade_in2); logo4.startAnimation(fade4);我遇到了“myAnimation无法解析”和“AnimationListener无法解析为类型”的问题。 - user1108339
在我看来,你应该自己尝试一下。无论如何,代码已经发布在我的回答中了。 - Jordi
1
你是指 fade4.setAnimationListener() 吗? - Si8
是的,在setAnimationListener语句之后缺少以下内容:); - Pablo Alfonso

4

你的代码让我看得眼睛都要流血了,所以我尽可能地修复了它:

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
    }
}

如果这不是一个打字错误,你实际上需要为第四个文本视图使用不同的动画效果,你可以删除计数检查,并将动画监听器添加到该单独的动画中。


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