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