2014-05-16 6 views
7

Mon application Android est une application OpenGL ES 2.0 en plein écran, donc le contenu principal est une extension personnalisée de GLSurfaceView. La mise en page d'activité ressemble à ceci:DrawerLayout ListView non dessiné avec GLSurfaceView en tant que contenu

<android.support.v4.widget.DrawerLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/drawer_layout"> 
    <FrameLayout android:id="@+id/content_frame" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111" /> 
</android.support.v4.widget.DrawerLayout> 

Je puis ajouter mon GLSurfaceView en utilisant la méthode addView du FrameLayout. Si je ne fais pas cela, le tiroir fonctionne comme prévu. Le ListView semble être retiré correctement lorsque je l'ai glissé, car je ne peux plus interagir avec le GLSurfaceView jusqu'à ce que je le glisse à gauche vers la gauche. Mais il n'est pas affiché du tout, comme le GLSurfaceView est toujours rendu dessus.

Comment puis-je faire fonctionner un DrawerLayout avec un GLSurfaceView comme contenu?

Répondre

16

Je viens de faire face au même problème, et j'ai trouvé une solution de contournement assez stupide pour cela. Ce problème semble affecter uniquement DrawerLayouts et non les vues régulières. Placez simplement une vue vide sur votre GLSurfaceView, pour la masquer loin du tiroir.

Voici mon fichier de mise en page dépouillée comme échantillon pour vous:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <GLSurfaceView 
      android:id="@+id/glSurfaceView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </RelativeLayout> 


    <FrameLayout 
     android:id="@+id/frameLayoutDrawer" 
     android:layout_width="@dimen/navigation_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="end" 
     android:background="@android:color/white" /> 
</android.support.v4.widget.DrawerLayout> 
+1

Vous monsieur ont gagné votre réputation, fonctionne à merveille! Une note rapide pour les personnes qui ajoutent dynamiquement leur 'GL View': il suffit de le placer en arrière-plan lors de l'ajout au' ViewGroup' avec un index. Comme ceci: 'myRelativeLayout.addView (myGlView, 0);' – avalancha

Questions connexes