ошибка в классе активности относительно AnimationListener - PullRequest
0 голосов
/ 01 января 2012

Я следую учебнику по приложениям Sams Teach Yourself для Android и заполнил следующее для класса QuizSplashActivity, как указано в книге.Тем не менее я получаю сообщение об ошибке в коде, который я выделил жирным шрифтом **, где написано AnimationListener():

package com.androidbook.triviaquiz;

import android.content.Intent;
import android.os.Bundle;
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);
    setContentView(R.layout.splash);

TextView logo1 = (TextView) findViewById(R.id.textViewTopTitle);
Animation fade1 = AnimationUtils.loadAnimation(this, R.anim.fade_in);
logo1.startAnimation(fade1);

TextView logo2 = (TextView) findViewById(R.id.textViewBottomTitle);
Animation fade3 = AnimationUtils.loadAnimation(this, R.anim.fade_in2);
logo2.startAnimation(fade3);

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

Animation fade2 = AnimationUtils.loadAnimation(this, R.anim.custom_anim);
fade2.setAnimationListener(new **AnimationListener()** {
    public void onAnimationEnd(Animation animation) {
        startActivity(new Intent(QuizSplashActivity.this, QuizMenuActivity.class));
        QuizSplashActivity.this.finish();
    }
});
}
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    // stop the animation
    TextView logo1 = (TextView) findViewById(R.id.textViewTopTitle);
    logo1.clearAnimation();

    TextView logo2 = (TextView) findViewById(R.id.textViewBottomTitle);
    logo2.clearAnimation();

    // ... stop other animations

    TableLayout table = (TableLayout) findViewById(R.id.tableLayout1);
    for (int i = 0; i < table.getChildCount(); i++) {
        TableRow row = (TableRow) table.getChildAt(i);
        row.clearAnimation();
    }
}

}

Ошибка:

"The type new Animation.AnimationListener(){} must implement the inherited abstract method Animation.AnimationListener.onAnimationStart(Animation)".

В книге ничего не говорится об этом и просто интересно, может ли кто-нибудь помочь.

Заранее спасибо.

Моисей

1 Ответ

2 голосов
/ 01 января 2012

AnimationListener - это интерфейс. Это означает, что когда вы помещаете это в свой код, вы должны реализовать все методы. Как видно из API , существует три метода:

onAnimationStart(Animation a)
onAnimationEnd(Animation a)
onAnimationRepeat(Animation a)

Вы реализовали только одно: onAnimationEnd. Вы должны реализовать другие, даже если вы ничего не вкладываете в них.

Вот ваш исправленный код:

fade2.setAnimationListener(new AnimationListener() {
    public void onAnimationEnd(Animation animation) {
        startActivity(new Intent(QuizSplashActivity.this, QuizMenuActivity.class));
        QuizSplashActivity.this.finish();
    }
    public void onAnimationStart(Animation a) { }
    public void onAnimationRepeat(Animation a) { }

});

Обратите внимание на новые методы в классе.

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...