不做动画并移动到下一个屏幕

时间:2013-04-09 16:23:41

标签: java android eclipse

我正在浏览Sams Android Development书,我将动画代码和代码移到下一个屏幕。我在手机和AVD上进行了测试,但它无法正常工作。这是代码:

public class QuizSplashActivity extends QuizActivity {


@Override
protected 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.BottomView1);
    Animation fade3 = AnimationUtils.loadAnimation(this, R.anim.fade_in);
    logo1.startAnimation(fade3);

    Animation spinin= AnimationUtils.loadAnimation(this, R.anim.custom_anim);
    LayoutAnimationController controller = new LayoutAnimationController(spinin);
    TableLayout table = (TableLayout) findViewById(R.id.TableLayout01); {
    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();
    }
    public void onAnimationStart(Animation a) { }
    public void onAnimationRepeat(Animation a) { }
});
}



@Override
protected void onPause() {
    super.onPause();
    TextView logo1= (TextView) findViewById(R.id.TextViewTopTitle);
            logo1.clearAnimation();
    TextView logo2= (TextView) findViewById(R.id.BottomView1);
            logo2.clearAnimation();

}
}
`

请帮忙,我想进入下一章。

同样,如果我运行此代码,则动画不会运行,应用程序也不会移动到下一个屏幕。

由于

1 个答案:

答案 0 :(得分:0)

首先,onAnimationEnd fade2是你开始下一个活动的地方,但我没有看到你在任何地方使用它。

我认为您对要制作动画的视图以及要在此处使用的动画感到困惑:

    TextView logo1 = (TextView) findViewById(R.id.TextViewTopTitle);
    Animation fade1 = AnimationUtils.loadAnimation(this, R.anim.fade_in);
    logo1.startAnimation(fade1); // <----- is this right?

    TextView logo2 = (TextView) findViewById(R.id.BottomView1);
    Animation fade3 = AnimationUtils.loadAnimation(this, R.anim.fade_in);
    logo1.startAnimation(fade3); // <----- and this one?

此外,onAnimationEnd不可靠。您可以查看setRepeatCount()setRepeatMode()并使用它们,但是它们存在多个错误,更糟糕的是,这些错误因Android版本而异。

相反,您可以使用延迟的Runnable来完成“动画后期”工作:

new Handler().postDelayed(new Runnable() {
    public void run() {

        view.clearAnimation();  // <--- whichever view you are animating

        startActivity(new Intent(QuizSplashActivity.this, QuizMenuActivity.class));
        QuizSplashActivity.this.finish();
    }
}, fade2.getDuration());

此runnable将延迟,但fade2设置为动画。当它触发时,它会清除当前动画并开始活动。

祝你好运!