开发者

Adding View to Relative Layout behind an existing view causes screen flicker

开发者 https://www.devze.com 2023-04-08 14:36 出处:网络
I\'m trying to insert a View behind another view that is taking up the full screen and then later removing the view in the front to reveal the only remaining view. Functionally, everything is working

I'm trying to insert a View behind another view that is taking up the full screen and then later removing the view in the front to reveal the only remaining view. Functionally, everything is working as expected but the problem is that when I call View.addView() to add the second view, specifying to add it at index 0 so it is behind the first view, the screen flickers. It's almost as if the view is actually getting added in front of the first view for a fraction of a second and then it is hidden again as it is moved behind it.

Here's what I'm doing:

When the Activity is created I add an ImageView to a RelativeLayout and make the RelativeLayout instance the Activity's content view:

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

When the Activity is started, I created and add the GLSurfaceView to the RelativeLayout at index 0, so it is behind the ImageView:

protected void onStart() {

    super.onStart();

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

Later, after all of the loading is done and the GLSurface开发者_高级运维View is ready to continuously render, the splash ImageView is removed and cleaned up.

public void hideSplashScreen() {

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

Is there a better way to do this that doesn't require creating the GLSurfaceView before the onStart() is called?


Have you tried using view.setVisibility(View.GONE) on of the view that you adding behind? Of course before you are adding it.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号