如何在 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);
我用我的个人标志做了一个索引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);