2012-08-24 16 views
6

Pracuję nad specjalnym interfejsem użytkownika w typie Android -Sandwich, małym GalleryView na GLSurfaceView (z przezroczystymi obszarami) na górze widoku tła (LinearLayout + niektóre widżety). W ten sposób myślę o jej utworzeniu:Jak dodać GLSurfaceView między widokami Androida?

<User> 

widok z góry
--- GalleryView
|
--- GLSurfaceView (z przezroczystymi obszarami)
|
--- LinearLayout (widgety)
widok z dołu

W trybie zwykłym GLSurfaceView mają czarne tło na przezroczyste obszary, więc nie widzę dolną warstwę, ale kiedy używam setZOrderOnTop (true); Widzę dolną warstwę, ale górna warstwa (galeria) również znajduje się za widokiem Glsurface. Jak mogę osiągnąć pożądany widok, jak w schemacie?

kod XML manekin Przykład (z AnalogClock zamiast GalleryView):

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

    <LinearLayout 
     android:id="@+id/LinearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|right" > 

     <AnalogClock 
      android:id="@+id/analogClock2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <com.test.CustomGlView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/gl_view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

    <AnalogClock 
     android:id="@+id/Gallery_dummyview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
+0

Nie dostałem od nas tego, czego dokładnie chcesz? Czy potrzebujesz pomocy w pisaniu układu XML? –

+2

Myślę, że problem nie leży w układzie, ale w rozliczeniu GLSurfaceView. Domyślnie nie pokazuje przezroczystego obszaru, bez względu na to, co robię, dopóki nie ustawięZOrderOnTop (true) ;, ale to ustawienie powoduje, że powierzchnia jest na wierzchu ... więc w jaki sposób mieć ten sam układ strony i mieć przezroczysty obszar w Glsurfaceview? – prot0n

Odpowiedz

2

Nie można tego zrobić.

Powierzchnia GLSurfaceView znajduje się na osobnej warstwie kompozycji z interfejsu użytkownika opartego na widoku. Może znajdować się nad widokami lub pod nimi, ale nie może być umieszczony pomiędzy elementami widoku.

Zamiast tego można użyć TextureView (API 14+). Ma powierzchnię do renderowania, ale jest połączona z warstwą Widok przez aplikację, więc układ działa tak, jak każdy inny widok. Będziesz musiał stworzyć własną konfigurację EGL i zarządzanie wątkami dla GLES zamiast polegać na tym, co jest w GLSurfaceView, ale możesz znaleźć przykłady w Grafika.