Android 如何在加载活动时显示飞溅图像

Android 如何在加载活动时显示飞溅图像,android,splash-screen,Android,Splash Screen,我有一个包含许多UI视图的活动。在onCreate方法中,我发现setContentView的单行需要8-12秒才能完成。所以我想在加载时显示我的徽标图像。我尝试了很多事情,但没有成功。我怀疑主要原因可能是在完成setContentView之前,什么都不能显示 任何帮助都将不胜感激 更新: 我想很多人不知道在完成setContentView之前不能显示任何对话框。因此,使用另一种飞溅活动对我毫无帮助 更新2 找到问题的原因后,我忘记更新此问题。请参考以下问题:下面是使用CountDownTime

我有一个包含许多UI视图的活动。在onCreate方法中,我发现setContentView的单行需要8-12秒才能完成。所以我想在加载时显示我的徽标图像。我尝试了很多事情,但没有成功。我怀疑主要原因可能是在完成setContentView之前,什么都不能显示

任何帮助都将不胜感激

更新:

我想很多人不知道在完成setContentView之前不能显示任何对话框。因此,使用另一种飞溅活动对我毫无帮助

更新2


找到问题的原因后,我忘记更新此问题。请参考以下问题:

下面是使用CountDownTimer类创建初始屏幕的简单代码

public class SplashDialogActivity extends Activity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        // Be sure to call the super class.
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.layout);
      counter.start();
    }
    MyCount counter = new MyCount(5000, 1000);
 public class MyCount extends CountDownTimer{
            public MyCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
            }

            @Override
            public void onFinish() {
                go_back();
            }

            @Override
            public void onTick(long millisUntilFinished) {



              }
     }

 public void go_back()
        {
          counter.cancel();

                    Intent i=new Intent(this,account.class);
                    i.putExtra("first_time", true);
                    startActivity(i);

            this.finish();
        }
}

请在启动页面中尝试此代码

private Thread mSplashThread;    

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.splesh);

    final Splash sPlashScreen = this;   

     mSplashThread =  new Thread(){
        @Override
        public void run(){
            try {
                synchronized(this){
                    wait(5000);
                }
            }
            catch(InterruptedException ex){                    
            }

            finish();

            Intent intent = new Intent();
            intent.setClass(sPlashScreen,Login.class);
            startActivity(intent);
            stop();                    
        }
    };

    mSplashThread.start();        
 }

// Processes splash screen touch events
@Override
public boolean onTouchEvent(MotionEvent evt) {

     if(evt.getAction() == MotionEvent.ACTION_DOWN)
     {
         synchronized(mSplashThread){
             mSplashThread.notifyAll();
         }
     }
     return true;
}    

使用
AsyncTask

将splash放入
onPreExecute()

并在
doInBackground()中完成您的工作


关闭splash in
onPostExecute()

我建议您使用我的方法:[Link][1]它对我来说很好。[1] :先生,您可以缩短MyCount计数器=新建MyCount(2000,1000)的时间;2000表示2秒。因此,这就是如何控制splashscreen显示的时间try以同时显示两个屏幕(splash和main)在一个活动中,通过两次使用setContentView,并且在两次使用之间,您可以使用thread或timerone。如果setContentView需要时间,则尝试在运行时而不是在设计时加载数据或图像文件