Не удается запустить новое действие.что-то связано с onAnimationEnd?

#android #eclipse #android-activity #listener #android-animation

#Android #eclipse #android-активность #прослушиватель #android-анимация

Вопрос:

Код для 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 метод (Animation анимация). Хотя я могу ошибаться, поскольку я довольно новичок в 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)    
  

Я думаю, что callstacks должны быть в logcat, но я получаю «Не удается открыть файл трассировки стека» /data/anr/traces.txt ‘: Отказано в разрешении’ регистрирует ошибку в logcat.
Также приложение, похоже, завершается сбоем до отображения анимации f2 (которая прослушивается).t2 никогда не отображается.

Ответ №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);
  

Без запуска анимации для просмотра прослушиватель не запустится.

Комментарии:

1. Ок, это исправлено. Теперь запускается список, но после запуска действия я получаю сообщение «приложение было неожиданно остановлено. Попробуйте еще раз. Принудительное закрытие’. Кажется, в то время как в чем-то, называемом ZygoteInit $MethodAnd.

2. Укажите трассировку стека ur в вопросе. Это даст представление о том, что вызывает ошибку.