在我的主要活动中,我想设置它,以便我首先遇到contentView
只显示背景和一些文本。 X秒后,我想更改为我的其他视图(GLSurfaceView
)。
这显然是我做错了。
这就是我想象它可以完成的方式(全部采用onCreate
方法):
setContentView(R.layout.main);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
viewer = new Viewer(this);
setContentView(viewer);
布局Main
是我想要在开头显示的内容,Viewer
是我的GLSurfaceView
类。
它会变成黑色10秒然后开始加载我通过OpenGLES显示的对象。
布局Main
没有任何问题,因为如果我只删除Thread.sleep
采取行动的地方线下它就行了。但是,在Thread.sleep
结束之前没有任何事情发生......
话虽如此,我的问题如下:
contentView
在完成 Thread.sleep
之后才会改变?答案 0 :(得分:10)
我在你的onCreate()中假设这个,这就是为什么你什么也看不见。
我实现这个的方法是在doInBackground中使用AsyncTask sleep启动一个线程,并在onPostExecute中设置新视图。
答案 1 :(得分:2)
不要让睡眠成为主线程(UI线程)。对于那种类型的作品,请使用threads
,AsynkTas
k或TimerTask
。
答案 2 :(得分:2)
你没有像你想象的那样沉睡UI线程。
您希望实现的最简单的方法是将视图分离为单独的活动,让Android处理视图之间的转换。它为您的代码库添加了另一个文件,但它非常简单。假设您的初始普通视图(R.layout.main
)适用于SplashActivity
活动,并且您的启动后视图会转到PostSplashActivity
。然后你可以做这样的事情:
public class SplashActivity extends Activity {
private static long DELAY = 10000; //milliseconds;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
Intent postSplash = new Intent(SplashActivity.this, PostSplashActivity.class);
SplashActivity.this.startActivity(postSplash);
SplashActivity.this.finish();
}
}, DELAY);
}
}
这会绘制您的R.layout.main
布局,然后对您的startActivity
进行PostSplashActivity
调用,并告诉队列等待DELAY
毫秒来执行它
答案 3 :(得分:0)
听起来你想要像闪屏一样的东西。我想将这些视为与以下屏幕分开,因此总是使用单独的活动而不是两次调用setContentView。你仍然需要睡在一个线程中。
虽然只是个人偏好......