Как показать заставку при загрузке - PullRequest
6 голосов
/ 18 ноября 2011

У меня есть действие, которое содержит много просмотров пользовательского интерфейса.В методе onCreate я обнаружил, что для завершения одной строки setContentView требуется 8-12 секунд. Поэтому я хочу показать свое изображение логотипа во время загрузки.Я перепробовал много вещей, но безуспешно.Я подозреваю, что основной причиной может быть то, что перед завершением setContentView ничего не может быть показано.

Любая помощь будет оценена.

ОБНОВЛЕНИЕ:

Я думаюмногие люди не знают, что вы не можете показать ни одно диалоговое окно до завершения setContentView.Поэтому использование другого всплеска не помогает мне вообще.

UPDATE2

Я забыл обновить этот вопрос после того, как обнаружил причину проблемы.Пожалуйста, обратитесь к следующему вопросу: setContentView занимает много времени (10-15 секунд) для выполнения

Ответы [ 3 ]

7 голосов
/ 20 октября 2012

использование AsyncTask

положить всплеск в onPreExecute()

и делай свою работу в doInBackground()

и закройте всплеск в onPostExecute()

0 голосов
/ 18 ноября 2011

попробуйте этот код для заставки

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;
}    
0 голосов
/ 18 ноября 2011

Ниже приведен простой код для создания заставки с использованием класса 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();
        }
}
...