【问题标题】:Unable to launch a new activity.something to do with onAnimationEnd?无法启动新活动。与 onAnimationEnd 有关吗?
【发布时间】:2026-01-17 04:15:02
【问题描述】:

QuizSplashActivity 的代码:

package com.androidbook.triviaquiz;

import java.text.DateFormat;
import java.util.Date;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class QuizSplashActivity extends QuizActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String rest="First Time Launched";



        String launchd=DateFormat.getDateInstance().format(new Date());
        String launcht=DateFormat.getTimeInstance().format(new Date());
        String ldt=launchd+" "+launcht;

        SharedPreferences set=getSharedPreferences(GAME_PREFERENCES,MODE_PRIVATE);
        if(set.contains("lastLaunch"))
        {rest=set.getString("lastLaunch", "default");

        }
        Log.i("LaunchInfo",rest);

        SharedPreferences.Editor edit=set.edit();

        edit.putString("lastLaunch",ldt);
        edit.commit();


        setContentView(R.layout.splash);
        anime();
    }

    private void anime()
    {TextView t1=(TextView)findViewById(R.id.TextViewTopTitle);
    Animation f1=AnimationUtils.loadAnimation(this, R.anim.fade_in);
    t1.startAnimation(f1);
    TextView t2=(TextView)findViewById(R.id.TextViewBotTitle);
    Animation f2=AnimationUtils.loadAnimation(this, R.anim.fade_in2);

    //t2.startAnimation(f2);
   // Animation fade2 =AnimationUtils.loadAnimation(this, R.anim.fade_in2);
    //View.startAnimation(fade2);
    t2.startAnimation(f2);

    AnimationListener animListener=new AnimationListener() {
        public void onAnimationEnd(Animation animation){
            startActivity(new Intent(QuizSplashActivity.this,QuizMenuActivity.class));
            QuizSplashActivity.this.finish();

        }


        public void onAnimationRepeat(Animation animation) {
        }

        public void onAnimationStart(Animation animation) {
        }


    };
    f2.setAnimationListener(animListener);
    Animation spinin=AnimationUtils.loadAnimation(this,R.anim.custom_anim);
    LayoutAnimationController controller=new LayoutAnimationController(spinin);
    TableLayout tb=(TableLayout) findViewById(R.id.tableLayout1);
    for(int i=0;i<tb.getChildCount();i++)
    {TableRow row=(TableRow) tb.getChildAt(i);
    row.setLayoutAnimation(controller);

    }


    }
    @Override
    protected void onPause()
    {super.onPause();
    TextView t1=(TextView)findViewById(R.id.TextViewTopTitle);
    t1.clearAnimation();
    TextView t2 =(TextView)findViewById(R.id.TextViewBotTitle);
    t2.clearAnimation();
    TableLayout tb=(TableLayout) findViewById(R.id.tableLayout1);
    for(int i=0;i<tb.getChildCount();i++)
    {TableRow row=(TableRow) tb.getChildAt(i);
    row.clearAnimation();

    }


    }
    @Override
    protected void onResume()
    {super.onResume();
    anime();

    }


}

QuizMenuActivity 代码

package com.androidbook.triviaquiz;


import android.os.Bundle;

public class QuizMenuActivity extends QuizActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu);
    }
}

在启动动画(特别是fade_in2)后,QuizMenuActivity 应该被启动并完成启动。动画效果很好,但 QuizMenuActivity 似乎没有启动。玩弄调试器/断点,似乎程序流程永远不会进入onAnimationEnd(动画动画)方法。虽然我可能是错的,因为我对 eclipse 和 android 还很陌生。

我已经根据第一个回复修复了代码并对其进行了更新。现在监听器正在触发,但在启动活动后我得到“应用程序已意外停止。请重试。强制关闭”。似乎正在执行某些操作称为 ZygoteInit$MethodAnd。

这是调用堆栈吗:

tiv [Android Application]   
    DalvikVM[localhost:8612]    
        Thread [<3> main] (Running) 
        Thread [<13> Binder Thread #2] (Running)    
        Thread [<11> Binder Thread #1] (Running)    

我认为调用堆栈应该在 logcat 中,但我在 logcat 中收到“无法打开堆栈跟踪文件 '/data/anr/traces.txt': Permission denied”错误日志。 此外,应用程序似乎在显示动画 f2(正在监听的内容)之前崩溃。t2 永远不会显示。

【问题讨论】:

    标签: android eclipse android-activity listener android-animation


    【解决方案1】:

    -将清单更改为此 - 它解决了我的问题 -在活动名称的开头添加点,不知道为什么或是否有必要!

    <?xml version="1.0" encoding="utf-8"?>
    <manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.androidbook.triviaquiz7"
        android:versionCode="1"
        android:versionName="1.0">
    <application
        android:label="@string/app_name"
        android:debuggable="true"
        android:icon="@drawable/quizicon">
        <activity
            android:name=".QuizSplashActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QuizGameActivity"></activity>
        <activity
            android:name=".QuizSettingsActivity"></activity>
        <activity
            android:name=".QuizScoresActivity"></activity>
        <activity
            android:name=".QuizHelpActivity"></activity>
        <activity
            android:name=".QuizMenuActivity"></activity>
    </application>
    <uses-sdk
        android:minSdkVersion="7" />
    

    【讨论】:

      【解决方案2】:

      您似乎正在将动画侦听器添加到“fade2”动画对象。但是该动画没有设置为像

      这样的任何视图
      view.startAnimation(fade2);
      

      如果不为视图启动动画,侦听器将不会触发。

      【讨论】:

      • 好的,修复了。现在监听器正在触发,但在启动活动后,我得到“应用程序已意外停止。请再试一次。强制关闭”。似乎是在一个名为 ZygoteInit$MethodAnd 的东西中。
      • 把你的堆栈跟踪放在问题中。它将给出导致错误的原因。