2011-12-18 254 views
4

在我的主要活動中,我想讓它首先通過contentview來展示背景和文字。 X秒後,我希望我改變到我的其他視圖(GLSurfaceView)。「setContentView」究竟做了什麼?

這顯然是我做的完全錯誤的事情。

這是我所想象它可以一直做(這是所有在OnCreate)

setContentView(R.layout.main); 

    try { 
     Thread.sleep(10000); 
    } catch (InterruptedException e) { 
    } 

    viewer = new Viewer(this); 

    setContentView(viewer); 

在哪裏佈局主要是想我想在開始就表現出和瀏覽器是我GLSurfaceView類。

會發生什麼,它只是beeing黑色10秒,然後開始加載我通過OpenGL(ES)顯示的對象。

佈局「主」沒什麼錯,因爲它的工作原理如果我只是在線程休眠的地方擦除線以下采取行動。芹苴什麼也沒有發生之前的Thread.sleep結束...

雖這麼說,我的問題是下面

  • 爲什麼內容查看不改變,直到了Thread.sleep完成後?
  • 什麼是適當的解決方案,我想實現什麼?

回答

8

我假設這在你的onCreate(),這就是爲什麼你什麼都看不到。

我實現這個的方式是在doInBackground中使用AsyncTask sleep並在onPostExecute中設置新視圖來啓動一個線程。

0

看來你正在讓主線程睡眠。這可能是代碼運行之後告訴的原因。

2

不要讓睡眠成爲主線程(UI線程)。請使用threadsAsynkTas k或TimerTask代替該類型的作品。

0

這聽起來像你想要的東西像一個閃屏。我喜歡將這些視爲獨立於以下屏幕,因此始終使用單獨的活動而不是兩次調用setContentView。你仍然需要睡在一個線程中。

只是個人喜好,但...

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毫秒去執行它。