Добавление вида к относительной компоновке за существующим видом вызывает мерцание экрана - PullRequest
4 голосов
/ 24 сентября 2011

Я пытаюсь вставить 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);
}

Когда Activity запущен, я создал и добавил 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));
}

Позже, после того, как вся загрузка будет выполнена, и GLSurfaceView будет готов к непрерывной визуализации, всплеск ImageView снят и очищен.

public void hideSplashScreen() {

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

Есть ли лучший способ сделать это, не требующий создания GLSurfaceView до вызова onStart () ?

1 Ответ

0 голосов
/ 29 сентября 2013

Вы пытались использовать view.setVisibility(View.GONE) на представлении, которое вы добавляете позади?Конечно, прежде чем добавить его.

...