2011-08-16 28 views
1

私は最高のアプローチではないかもしれませんが、アプリケーションではにかなり多くのレイアウトをロード/準備するためにonCreateを使用していますので、アプリケーションの開始後には、したがって、さまざまな画面をスムーズかつ高速に変更できます。onCreateでスプラッシュスクリーンを表示する方法はありますか?

この方法の欠点は、最初のレイアウトが表示されるまでに5秒かかることです。正確には、ViewAnimatorのすべての画面はXMLレイアウトで定義されていて、onCreateの間にそれらが膨張しています。

私のアプリケーションはスプラッシュスクリーンを持っている必要がありますので、私の質問は、これらの5秒を使って画像を表示する方法があればですか?

編集:私はこの単純な解決策を考え出したあなたの答えに

ありがとう:

Activity activity; 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_splash); 
    activity = this; 
    LinearLayout splash_layout = (LinearLayout) this.findViewById(R.id.splash_layout); 

    // after 1 second of splash screen, start initializing everything 
    splash_layout.postDelayed(new Runnable() 
    { 
     public void run() 
     { 
      activity.setContentView(R.layout.main); 

      // Here init whole layout and all class 
      // During initialization, the splashscreen is still visible 
     } 
    }, 1000); 
} 

答えて

2

私はonResumeが終了したとメインスレッドがサービスメッセージを開始した後まで、任意の画面が表示されます信じていません。 2つの.xmlレイアウトを使用できますか?開始時にスプラッシュ画面をすぐにロードし、その後、アクティビティが開始された後、レイアウトインフレータで画面の残りの部分をロードする方法

+0

本当に間違いありません。私はこの答えに賛成して私の答えを削除しました。質問をした人がすべきことは、スプラッシュ画面を表示してから、プライマリレイアウトを表示するアクティビティを起動する新しいアクティビティを作成することです。このようにして、プライマリレイアウトが表示されるまでスプラッシュ画面が表示されます。 –

+0

はい、これはこれまでの私にとって唯一の選択肢のようです。まず、これを実装するのは難しいように思えましたが、もし私がmain.xmlを1つだけ持っていれば、おそらく動作するはずです。私が見ているように、パラメータとしてviewを持つsetContentView()もあります。 –

+0

それは動作します!簡単な解決策で質問を更新しました。ありがとうございました。 –

1

私があなただったら、私はActivity.onCreate(のうちの長時間実行タスクを移動します) ANR = Application Not Respondingエラー、つまり別のスレッドにつながる可能性があるためです。

+0

これもまた。このため、アプリが5秒間ハングしないようにしてください。 – DeeV

+0

この良いアドバイスありがとうございました:) –

0

私のアプリでこの効果を達成するために、私はあなたが望むどんなイメージでもビューを使用します。フェードインやフェードアウトのアニメーションを使用します。

一つの可能​​な解決策のためにこの質問をチェックアウト:Android change layout dynamically

関連する問題