2010-01-21 3 views
3

J'ai une application qui utilise OpenGL sur un GLSurfaceView. Le problème est que la charge initiale prend un certain temps à traiter les textures et à préparer les choses. Ce que je veux faire est d'avoir un simple PNG affiché (avec une légère animation ) pendant que le GLSurfaceView se prépare. Dès que c'est prêt à rendre, je voudrais démolir l'écran de démarrage.Création d'un écran Android Splash/Loading approprié

Quelle est la bonne façon de procéder? J'ai essayé ViewFlipper, ViewSwitcher et un tas d'autres choses à basculer entre ma vue R.layout.main et mon GLSurfaceView, mais je ne peux pas sembler faire les choses correctement.

Des idées?

Répondre

4

Étape 1: Faites votre GLSurfaceView être android:visibility="invisible" dans votre mise en page XML

Étape # 2: Mettez cette GLSurfaceView à l'intérieur d'un FrameLayout

Étape # 3: Ajouter un ImageView comme un autre enfant du même FrameLayout

Étape 4: Lorsque le GLSurfaceView est prêt, rendre le ImageView invisible et rendre le GLSurfaceView être visible

+0

J'ai essayé de faire cela, mais je dois faire quelque chose de mal, car chaque fois que j'ajouter le GLSurfaceView au main.xml, il se bloque en essayant d'exécuter mon activité. Avez-vous un échantillon ou un lien de référence vers lequel vous pouvez me diriger? – cjserio

+3

En fait, j'ai été capable de faire marcher ça mais le problème est que le Renderer ne se réveille pas et ne crée pas sa surface si la vue est invisible ... – cjserio

+1

Cela ne marche pas, vu que surfaceview n'est pas appelé, comme invisible – Guy

3

Voici ce que je fait pour remédier à cette situation ...

J'ai créé une mise en page personnalisée nommée loader.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/selectLevelID" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/loader" 
    android:orientation="vertical" > 
</RelativeLayout> 

après cela, je ce, tout en créant le moteur de rendu pour glSurfaceView

public GlRenderer(Context ctx) 
      { 
loader_dialog = new Dialog(context,android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
loader_dialog.setContentView(R.layout.loader); 
loader_dialog.show() 
//do your initializations.... 
loader_dialog.dismiss(); 
} 

;

ou tout simplement appeler loader_dialog.dismiss(); après avoir chargé tous vos objets, textures etc ...

+0

Excellente idée, merci! –