2014-01-23 37 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