2014-03-22 4 views
1

Я хочу создать заставку при загрузке основного вида деятельности.Android - ImageView на заставке не работает

Итак, я добавил активность Splash.

package com.originerd.tau; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 

public class Splash extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splash); 

     Thread logoTimer = new Thread(){ 
      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       try { 
        Intent i = new Intent(Splash.this, Main.class); 
        startActivity(i); 

        sleep(4500); 
       } catch (Exception e) { 
        // TODO: handle exception 
        e.printStackTrace(); 
       } 
       finally{ 
        finish(); 
       } 
      } 
     }; 

     logoTimer.start(); 
    } 

} 

и activity_splash xml.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/splash" /> 

Но когда я его выполнил, экран показывает только черное окно и показывает основное действие через 3 секунды. Я думаю, что это связано с временем загрузки изображения активности всплеска. Поэтому я добавил sleep(1000); до линии Intent i = new Intent(Splash.this, Main.class);. И это работает, но я думаю, что это не то хорошее решение.

Я хочу знать, какое хорошее решение в этой ситуации. Цель состоит в том, чтобы показать изображение, в то время как основная активность готовит содержимое (занимает около 3 секунд). Если есть какие-либо решения (Загрузка изображения), а не заставки, пожалуйста, дайте мне знать.

ответ

0

Вместо использования sleep метода в Thread вы можете сделать то же самое легко, используя Handler.postDelayed как:

Handler handler = new Handler(); 
handler.postDelayed(runnable, 1000); 
Runnable runnable = new Runnable() { 
     @Override 
      public void run() { 
      Intent i = new Intent(Splash.this, Main.class); 
      startActivity(i); 
      handler.removeCallbacks(runnable); 
    } 
}; 
+0

Спасибо за ваш ответ. Но время подготовки основного занятия занимает около 3 секунд. Как это решить? – user3242589

0

Как большой (байт) Ваш образ? Возможно, задержка может быть сведена к минимуму, уменьшив размер/сложность изображения с помощью графических инструментов. В качестве теста вы можете попробовать одноцветное изображение, которое должно быть довольно маленьким. Это, по крайней мере, скажет вам, является ли задержка функцией размера изображения.

+0

Размер изображения составляет около 100 КБ. Это слишком большой, чтобы показать в этом случае? Любые другие решения? – user3242589

+0

Я попытался изменить изображение в progressbar. Но это пока не показано. Является единственной задержкой решения, например 'sleep'? – user3242589

+0

100KB не очень большой; ваша проблема лежит в другом месте. – scottt

Смежные вопросы