所以,我刚读过这个问题:How do I make a splash screen? 但是,不是添加固定的延迟(如在最佳答案中),我想在MainActivity(使用MapFragment)加载时保持启动屏幕。
public class SplashScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
synchronized (this) {
try {
wait(3000);
System.out.println("Thread waited for 3 seconds");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
try {
t.start();
t.join();
finish();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
我添加了wait(3000)行,因为之前我注意到该线程没有长时间存活。但是,如果我让它等待更长时间,那么只有一个持续时间更长的黑屏。出于某种原因, SplashScreen活动不会显示ImageView 。 我该怎么办? 感谢。
答案 0 :(得分:4)
简单的方法......
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.example.tabs.R;
public class Splash extends Activity implements Runnable
{
Thread mThread;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
mThread = new Thread(this);
mThread.start();
}
@Override
public void run()
{
try
{
Thread.sleep(2000);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
startActivity(new Intent(Splash.this, MainActivity.class));
finish();
}
}
}
splash.xml如果要显示图像
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/splash" >
</LinearLayout>
注意如果您想在启动时执行一些UI操作。那么您必须创建一个处理程序并更新其中的UI。
答案 1 :(得分:1)
主线程长时间无法阻止。如果要在3秒内启动另一个事件,则应使用Handler
触发另一个事件。您可以使用sendMessageDelayed。此外,应在主线程中调用startActivity
。
答案 2 :(得分:-3)
像这样制作一个闪屏:
while(counter < 1300) {
try {
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
counter+=100;
}
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
希望它有所帮助!
修改强> Anotehr的方式如下:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
Intent intent = new Intent(getApplicationContext(), YourNextActivity.class);
startActivity(intent);
}
},3000); -> the splash will show for 3000 ms, you can reduce this.