2014-01-23 91 views
1

在我正在開發的應用程序中,我對加載屏幕的介紹感興趣。持續時間後會自動移動到下一個屏幕。加載屏幕的介紹

介紹本身,工作得很好。以及延遲系統的線程。 我的問題是讓他們一起工作。

的代碼:

public class MainActivity extends Activity implements OnClickListener { 

ImageView iv; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.loading_screen); 


    final Thread t1=new Thread(new Runnable() { 


    public void run() { 

     iv=(ImageView)findViewById(R.id.imgBtn1); 
     iv.setBackgroundResource(R.anim.loading_i_animation); 
     AnimationDrawable anim=(AnimationDrawable) iv.getBackground(); 
     anim.start(); 

     } 
    }); 

    t1.start(); 


    try { 
     Thread.sleep(2000); 
     finish(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    finally { 
     Intent st=new Intent(MainActivity.this,Welcome.class); 
     startActivity(st); 
    } 


    } 

此代碼的結果被打開白色畫面線程休眠時間的持續時間。之後通過意圖打開「Welcome.class」屏幕。

它只是跳過loading_screen,因爲它甚至不存在。

我希望你們能幫我解決這個問題。

回答

2

你把你的sleep放在UI線程上,它阻止Android顯示任何東西,直到它完成。試試下面的代碼:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.loading_screen); 

    iv=(ImageView)findViewById(R.id.imgBtn1); 
    iv.setBackgroundResource(R.anim.loading_i_animation); 
    AnimationDrawable anim=(AnimationDrawable) iv.getBackground(); 
    anim.start(); 

    new Handler().postDelayed(
     new Runnable() { 
      public void run() { 
       Intent st=new Intent(MainActivity.this,Welcome.class); 
       startActivity(st); 
       finish(); 
      } 
     }, 2000); 
} 

這樣的延遲將在一個獨立的線程運行,但在2秒鐘後它變回主線程並運行在您的Runnable

+0

指定的代碼,我理解的想法。但是,我的系統中的代碼不是編譯器。你能否重寫它? – YanivGK

+0

對不起,我其實是故意的。我的目標是顯示loading_screen並在2秒後移動到另一個屏幕。 所以停止系統的線程確實是在正確的地方。 – YanivGK

+1

問題是,您正在阻止系統進行任何操作(例如顯示您的屏幕)。在我的代碼中,你不會阻止它,所以它會顯示UI,但是在2秒延遲之後,它會更改爲其他活動。 – pshegger