4

我试图View在另一个占据全屏的视图后面插入一个,然后删除前面的视图以显示唯一剩余的视图。从功能上讲,一切都按预期工作,但问题是当我调用View.addView()添加第二个视图时,指定在索引 0 处添加它,使其位于第一个视图后面,屏幕闪烁。几乎就好像视图实际上被添加到第一个视图的前面几分之一秒,然后当它移动到它后面时它又被隐藏了。

这就是我正在做的事情:

创建 Activity 后,我将一个添加ImageView到 aRelativeLayout并使RelativeLayout实例成为 Activity 的内容视图:

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);
}

Activity启动时,我创建并添加GLSurfaceViewRelativeLayoutat index 0,所以它在后面ImageView

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 回答