如何在 5 秒后更改 activity?

How to change activity after 5 seconds?

我用我的个人标志做了一个索引activity。 我希望在 5 秒后更改 activity。 所以我准备了 2 个布局,我 运行 启动器。 在启动器 activity 我设置:

Intent intent = new Intent(Home.this, IndexActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        startActivity(intent);
        finish();

问题是 activity 在白色 activity 中被阻塞,并在 5 秒后改变 activity。

我是不是搞错了?

如何创建淡入淡出动画?而我怎么才能运行呢?谢谢

你永远不应该阻塞主线程。它负责更新 UI,如果您阻止它,用户界面将冻结。

而是使用 Handler 及其 postDelayed 方法。

首先在你的动画文件夹中声明它。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="1.0" />

</set>

然后在 acitivity 的 java 文件中从你要去的地方声明一个动画 :

    Animation animfadein,animFadeout;
     animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
                    R.anim.fade_in);  
animFadeout = AnimationUtils.loadAnimation(getApplicationContext(),
                    R.anim.fade_out);  

然后在startActivity(Intent);

之后

overridePendingTransition(animFadein, animFadeout);

这里是淡出:

fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <alpha
        android:duration="1000"
        android:fromAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="0.0" />

</set>

Thread.sleep() 会降低性能。您可以使用 Handler class' postDelayed() 方法来执行此操作:

Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {

    @Override
    public void run() {
        Intent intent = new Intent(Home.this, IndexActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(intent);
        finish();
    }

}, 5000L);