将视图添加到现有视图后面的相对布局会导致屏幕闪烁

时间:2011-09-23 21:49:24

标签: android android-layout android-view

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

这就是我正在做的事情:

创建活动后,我将ImageView添加到RelativeLayout,并将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);
}

启动活动后,我创建了GLSurfaceView并将RelativeLayout添加到索引为0的ImageView,因此它位于protected void onStart() { super.onStart(); m_layout.addView(new MyGLSurfaceView(), 0, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT)); } 后面:

ImageView

稍后,在完成所有加载并且GLSurfaceView准备好连续渲染之后, 飞溅public void hideSplashScreen() { if (m_splashImage != null) { m_layout.removeView(m_splashImage); m_splashImage = null; } } 被移除并清理干净。

GLSurfaceView

是否有更好的方法可以在调用 onStart()之前不需要创建{{1}}?

1 个答案:

答案 0 :(得分:0)

您是否尝试在添加后面的视图中使用view.setVisibility(View.GONE)?当然在你添加它之前。