4

Viewフルスクリーンを占有している別のビューの後ろに挿入し、後で前面のビューを削除して、残りのビューのみを表示しようとしています。機能的には、すべてが期待どおりに機能していますが、問題は、View.addView()を呼び出して 2 番目のビューを追加し、インデックス 0 に追加するように指定して最初のビューの背後にあると、画面がちらつくことです。ビューが実際に最初のビューの前にほんの一瞬だけ追加され、その後ろに移動すると再び非表示になるかのようです。

これが私がやっていることです:

アクティビティが作成されたら、 を に追加しImageViewRelativeLayoutインスタンスRelativeLayoutをアクティビティのコンテンツ ビューにします。

protected void onCreate(Bundle bundle) {

    super.onCreate(bundle);

    m_layout = new RelativeLayout(this);
    m_layout.setBackgroundColor(Color.BLACK);

    m_splashImage = new ImageView(this);
    m_splashImage.setImageResource(R.drawable.splash);
    m_splashImage.setScaleType(ScaleType.FIT_XY);

    m_layout.addView(m_splashImage, 
        new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,
        RelativeLayout.LayoutParams.FILL_PARENT));

    setContentView(m_layout);
}

アクティビティが開始されると、 を作成してインデックス 0 に追加したため、 の背後にありGLSurfaceViewます。RelativeLayoutImageView

protected void onStart() {

    super.onStart();

    m_layout.addView(new MyGLSurfaceView(), 0, 
        new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,
        RelativeLayout.LayoutParams.FILL_PARENT));
}

後で、すべての読み込みが完了し、GLSurfaceView が継続的にレンダリングする準備が整った後、スプラッシュImageViewが削除され、クリーンアップされます。

public void hideSplashScreen() {

   if (m_splashImage != null) {
        m_layout.removeView(m_splashImage);
        m_splashImage = null;
   }
}

onStart()が呼び出されるGLSurfaceView前に作成する必要がない、これを行うためのより良い方法はありますか?

4

1 に答える 1

0

view.setVisibility(View.GONE)後ろに追加したビューを使用してみましたか? もちろん、追加する前に。

于 2013-09-29T15:39:49.347 に答える