#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 в вопросе. Это даст представление о том, что вызывает ошибку.